如何提取json响应?
问题描述:
有人告诉我。如何提取json响应?
obj是一个JSON响应。
obj = { title: 'ABCD', _key: '-KX9Cwwuc2FjxcG-SNY0' }
我可以使用的console.log(OBJ [“标题”])获得ABCD。
如何复杂的情况?
obj = { '-KXu3irrOjUtcejm4VF3':
{ gold: 0,
title: ‘[email protected]',
uketuke: 0,
user: ‘[email protected]' },
'-KXu3vLo7--JeVYC9fJa': { title: ‘JUMP' },
'-KXu3yRZgFlDcS8BZ7e1': { title: 'JUMP1' } }
在这种情况下,我怎么能得到用户实体?
顺便说一句,像这个obj [“标题”]演示文稿,我认为这应该是ECMA标准, 请让我知道在哪里参考?
答
如果您知道密钥那么这很容易。例如:
obj = {
'-KXu3irrOjUtcejm4VF3': {
gold: 0,
title: '[email protected]',
uketuke: 0,
user: '[email protected]'
},
'-KXu3vLo7--JeVYC9fJa': { title: 'JUMP' },
'-KXu3yRZgFlDcS8BZ7e1': { title: 'JUMP1' }
}
var user_key = '-KXu3irrOjUtcejm4VF3'
user = obj[user_key].user
但是,如果你不知道在哪,然后用户存在下列功能可与渐近复杂度为O(n)的帮助对象的关键:
function getUser(obj) {
for (var key in obj) {
// skip loop if the property is from prototype
if (!obj.hasOwnProperty(key)) continue;
if (typeof obj[key].user !== undefined) {
return obj[key].user;
}
}
}
getUser(obj)
最后我在项目中使用了一些东西:jsonpath
$..user
想从你的OBJ返回所有user
。这样,你可以用一个复杂的json恕我直言去相当远。
答
谢谢, 非常反应!
1)2)对我来说没问题。
我试过了3)我尝试如下。 从'./jsonpath-0.8.0'导入jsonPath; ... text = jsonPath(snapshot.val(),“$ .. user”);
但出现以下错误。
Possible Unhandled Promise Rejection (id: 0):
(0,_jsonpath2.default) is not a function. (In '(0,_jsonpath2.default) (snapshot.val(),"$..user")', '(0,_jsonpath2.default)' is an instance of Object)
有什么不对吗?
感谢 商事
答
需要做一些更正:
要从此JSON响应var obj = { title: 'ABCD', _key: '-KX9Cwwuc2FjxcG-SNY0' }
访问属性值,你必须使用dot(.) operator
而不是[]
。
如果要使用obj[title]
它会给你一个错误:
Uncaught ReferenceError: title is not defined(…)
如果要使用obj.title
它会给你输出:
ABCD
所以,根据复杂情况:
第一件事:字符串应该用双引号括起来。
无效的JSON:
var obj = {
'-KXu3irrOjUtcejm4VF3': {
gold: 0,
title: '[email protected]',
uketuke: 0,
user: '[email protected]'
},
'-KXu3vLo7--JeVYC9fJa': { title: ‘JUMP' },
'-KXu3yRZgFlDcS8BZ7e1': { title: 'JUMP1' }
};
有效的JSON:
var obj = {
"-KXu3irrOjUtcejm4VF3": {
"gold": 0,
"title": "[email protected]",
"uketuke": 0,
"user": "[email protected]"
},
"-KXu3vLo7--JeVYC9fJa": {
"title": "JUMP"
},
"-KXu3yRZgFlDcS8BZ7e1": {
"title": "JUMP1"
}
}