1
whypool 2017-11-08 16:59:59 +08:00
是 json 对象只能能获取,不用啥工具,
json 字符串可以直接转 json 对象,不用啥工具,es5 自带 api |
2
fds 2017-11-08 17:01:26 +08:00
JSON.parse(字符串) 返回 js 对象
|
3
wenzichel 2017-11-08 17:04:39 +08:00
sf 中有人问过这个问题,你可以参考下: https://segmentfault.com/q/1010000011812768
|
4
autoxbc 2017-11-08 17:06:42 +08:00
动态生成代码,你需要 eval() 或者 new Function()
|
5
zhouyou457 OP |
6
zthxxx 2017-11-08 17:19:51 +08:00
|
7
lhstock 2017-11-08 17:21:40 +08:00
@zhouyou457 我可能也没看懂你的意思。json 对象是指对象吗。。。。? js 里有非 json 格式的对象吗?
|
8
cloudzqy 2017-11-08 17:22:30 +08:00
你说 json 有点误导人了,直接说通过'obj.id'取对象里的值就行了。
lodash 里面的 get 行,实现原理,看楼上的 sf 答案。 |
9
zthxxx 2017-11-08 17:22:42 +08:00
另外,正确说法是 「 JS 对象字面量」,你说的 「 JSON 对象」误导了前几楼的人
|
10
zhouxuchen 2017-11-08 17:33:34 +08:00
楼主的问题描述没问题啊……我看了标题就懂了。
php 里写过一个[类似的]( https://github.com/BarnettZhou/Parser/blob/master/src/AbstractParser.php#L270),270 行开始。 |
11
wxsm 2017-11-08 17:39:47 +08:00
```javascript
var deep_value = function(obj, path){ for (var i=0, path=path.split('.'), len=path.length; i<len; i++){ obj = obj[path[i]]; }; return obj; }; ``` |
12
fds 2017-11-08 17:45:32 +08:00
……好吧,那没必要提 JSON 呀,而且你帖子里写的还是“ json 数据”,直接说普通 js 对象呗……我也推荐直接用 lodash 的 get 函数,有需要可以直接看源码。
|
14
sammo 2017-11-08 18:04:22 +08:00
新手一定知道你遇到的这种问题是不是很 “经典” 的?如果是很经典的那么现成的库比如 lodash underscore 总能找到
( 不限于 js 语言 ) |
15
xqin 2017-11-08 21:42:40 +08:00
通过 `new Function` 来做, 如果为了防止出错, 可以在里面加 try/catch
```javascript var a = { "obj": { "id": "1", "value": "2", "test":[ {x:123, y:{z:9999,a:[555]}} ] }, "name" : "3" } function getValue (obj, key) { return new Function('x', 'return x.' + key)(obj) } console.log(getValue(a, 'obj.id')) console.log(getValue(a, 'name')) console.log(getValue(a, 'obj.test[0].x')) console.log(getValue(a, 'obj.test[0].y.z')) console.log(getValue(a, 'obj.test[0].y.a[0]')) ``` |
16
shenjo 2017-11-08 22:16:58 +08:00
lodash:
var object = { 'a': [{ 'b': { 'c': 3 } }] }; _.get(object, 'a[0].b.c'); // => 3 _.get(object, ['a', '0', 'b', 'c']); // => 3 _.get(object, 'a.b.c', 'default'); // => 'default' |
17
flowfire 2017-12-01 14:04:49 +08:00
如果你不用严格模式可以试试 with [光速逃
var json = JSON.parse('{"a": 1}'); with (json) { console.log(a); } |