JavaScript JSON通过给定的键进行解析而不循环
给定一个JSON字符串,如下所示:JavaScript JSON通过给定的键进行解析而不循环,javascript,json,Javascript,Json,给定一个JSON字符串,如下所示: { "__ENTITIES": [ { "__KEY": "196", "__STAMP": 1, "ID": 196, "firstName": "a", "middleName": "b", "lastName": "c", "ContactType": {},
{
"__ENTITIES": [
{
"__KEY": "196",
"__STAMP": 1,
"ID": 196,
"firstName": "a",
"middleName": "b",
"lastName": "c",
"ContactType": {},
"addressCollection": {
"__deferred": {
"uri": "/rest/Contact(196)/addressCollection?$expand=addressCollection"
}
},
"__ERROR": [
{
"message": "Cannot save related entity of attribute \"ContactType\" for the entity of datastore class \"Contact\"",
"componentSignature": "dbmg",
"errCode": 1537
}
]
}
]
}
是否有一种方法可以只获取\u错误
记录,我知道我可以使用
var mydata=json.parse(mydata)
然后从mydata
对象中找到它。但是我希望有一种方法只返回ERROR
字段
json.parse(mydata,“\uu ERROR”)
只获取\uu ERROR
字段中的信息,而不将整个json字符串转换为一个对象如果存在这样的函数,它将不得不解析整个内容,以找到您要查找的密钥
只需先解析它,然后获取所需的密钥:
var mydata = JSON.parse(mydata);
var errorObj = mydata.__ENTITIES[0].__ERROR[0];
如果需要,您可以创建自己的函数:
function parseAndExtract(json, key) {
var parsed = JSON.parse(json);
return parsed[key];
}
如果存在这样一个函数,它将不得不解析整个过程,以找到您正在寻找的密钥 只需先解析它,然后获取所需的密钥:
var mydata = JSON.parse(mydata);
var errorObj = mydata.__ENTITIES[0].__ERROR[0];
如果需要,您可以创建自己的函数:
function parseAndExtract(json, key) {
var parsed = JSON.parse(json);
return parsed[key];
}
“是否有一种方法可以只获取\uu错误
记录,我知道我可以使用var mydata=json.parse(mydata)
…但我希望有类似于json.parse(mydata,“\uu错误”)
”的方法。”
可能有这样做的库,但没有内置的。您需要编写针对所需数据的代码
最接近的方法是向JSON.parse
传递一个reviver函数
var errors = [];
var mydata = JSON.parse(mydata, function(key, val) {
if (key === "__ERROR")
errors.push(val);
return val
});
“是否有一种方法可以只获取\uu错误
记录,我知道我可以使用var mydata=json.parse(mydata)
…但我希望有类似于json.parse(mydata,“\uu错误”)
”的方法。”
可能有这样做的库,但没有内置的。您需要编写针对所需数据的代码
最接近的方法是向JSON.parse
传递一个reviver函数
var errors = [];
var mydata = JSON.parse(mydata, function(key, val) {
if (key === "__ERROR")
errors.push(val);
return val
});
不需要将整个json字符串转换为对象
这几乎是不可能的,对于不适合JS的内容,您需要某种惰性评估。此外,您还需要编写自己的解析器,其速度要比原生的JSON.parse
慢得多
var errors = [];
var mydata = JSON.parse(mydata, function(key, val) {
if (key === "__ERROR")
errors.push(val);
return val
});
是否有一种方法仅获取_错误记录
我不知道。此外,在整个对象树中查找具有该名称的第一个属性也是一项不寻常的任务。更好地访问实体[0]。\u错误[0]
不需要将整个json字符串转换为对象
这几乎是不可能的,对于不适合JS的内容,您需要某种惰性评估。此外,您还需要编写自己的解析器,其速度要比原生的JSON.parse
慢得多
var errors = [];
var mydata = JSON.parse(mydata, function(key, val) {
if (key === "__ERROR")
errors.push(val);
return val
});
是否有一种方法仅获取_错误记录
我不知道。此外,在整个对象树中查找具有该名称的第一个属性也是一项不寻常的任务。更好地访问
\uu实体[0]。\uu错误[0]
明确。不幸的是,JSON模式没有官方规范,因此必须循环访问数据。当然,如果您确信数据的形状将如上述所述,则可以使用:JSON.parse(response)。\uu ENTITIES[0]。\uu ERROR[0]。message
,但这并不是真正的建议。不幸的是,JSON模式没有官方规范,因此您必须遍历数据。当然,如果您确信数据的形状将如上述所述,您可以使用:JSON.parse(response)。\uu ENTITIES[0]。\uu ERROR[0]。message
但这并不是真正的建议。很好地使用了reviver
参数!但是您可以使用return undefined
放弃所有未使用的数据。@Bergi:如果不需要其余的解析数据,则为True。或者可以仅为\u错误返回未定义的。参数的使用非常好!但是您可以使用return undefined
放弃所有未使用的数据。@Bergi:如果不需要其余的解析数据,则为True。或者可以仅为\u错误返回未定义的。