如何轻松地使用javascript函数从json字符串解析出特定对象

如何轻松地使用javascript函数从json字符串解析出特定对象,javascript,json,Javascript,Json,我想取出这些字段中的每一个,并将它们放入javascript中它们自己的变量中 { "did": "00022B9A000000010001", "ps": -1, "hostName": "zs-dptpre-002.mr.corp.l.com", "ipAddress": "10.4.225.29" } 在ES6中,可以使用对象分解 var obj={ “did”:“00022B9A0000000010001”, “ps”:-1, “主机名”:“zs-dptpre-

我想取出这些字段中的每一个,并将它们放入javascript中它们自己的变量中

{
  "did": "00022B9A000000010001",
   "ps": -1,
   "hostName": "zs-dptpre-002.mr.corp.l.com",
   "ipAddress": "10.4.225.29"
}

在ES6中,可以使用对象分解

var obj={
“did”:“00022B9A0000000010001”,
“ps”:-1,
“主机名”:“zs-dptpre-002.mr.corp.l.com”,
“IP地址”:“10.4.225.29”
}
var{did,ps,hostName,ipAddress}=obj;

log(主机名)
,或者您可以在JSON中使用类似于Xpath的语法。有关此版本的详细信息,请参阅。 在下面的示例中,我将获取所有对象属性值(叶)

////JSONPATH
“值”,结果:[],正常化:函数(e)函数(e)函数(e)函数(e)函数(e)函数(e)函数(e)函数(e)函数(e)函数(t)var t=[[var t)方方当事人(obj,EXJ,EXR,EXJ,EXR,arg,arg)函数(P)P)P={{{{结果.结果:值,值,值,值,结果::[;;;值,结果:[,结果,结果:[,结果,结果:[,正常化,正常化,正常化,正常化:恢复:函数(e)函数(e)函数(e)函数(e)函数(e)函数(e)方当事人(e)方当事人(e)方当事人(e)无无无无无变异变异变异变异变异,VAT,VAT.t.t.t.t.t,无无无无路路路路路路路路路路路路路路路路路路路(t#([0-9]+)/g,函数(e,r){返回t[r]}函数(e){为(var t=e.SpSplit(“;”,r(“”,”,a=1,n=t.长度;n>a;a a;a++)r++/^[0-9*.[5 5 5]测试(t[a)测试(t[a])测试(t[t[a]测试(t[a])测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a)测试(t[a])测试(t[a]),,,[测试(t[t[a)测试(t[a)测试(t(t[a)测试(t[a)测试(t[a)测试(t[a]),a.join(“;”,t&&t.hasOwnProperty(n))P.trace(a,t[n](一,a,t,t,r,a,n)功能(e,t,r,r,a,n)功能(e,t,r,r,a,n){(P)跟踪(e“;”;(r,a,a,a,a,n);;其他若(若)若(若)若(若)若(若)若(若)若(若)若(若)若(若)若(若)若(若)若(若)若(若)若)若(若)若(若)若)若(若)若(若)若(若)若(若)若)若(若)若)若)若(若)若)若(P)P。跟踪(P。跟踪(a)跟踪(a)跟踪(a)跟踪(a)跟踪(a)跟踪(a)跟踪(a)跟踪(a(a)跟踪(a(a)跟踪(a(a)跟踪(a)跟踪(a(a)跟踪(a)跟踪(a)跟踪(a(a)P.trace(l[s]+“;”+a,t,r);else/^\(.*?\)$/。test(n)?P.trace(P.eval[a,t,t,r.t,r.t,r.r.substrR(r.lastIndexOf((“;;;;;;;;;;;;;;;;“+a,t,t,t,(r.t,t,t,t,r.t,r.t,r.t,r.t,r.t,r)r:::::/^???(..[a,t,t,t,t,t,t,t,t,t,t,r,r,r.t,r.t,r.t,r.t,r.t,r.t,r.t,r,r.r.r.r.subR.subR.subR.subR.r。substrstrR。subR。subR。subR。subR。substrR。subR。r。r。subR。r。r。r。r。r。r。r。subR。r。r。subR。sub函数(e,t,r,a,n){if(r数组实例)for(var l=0,s=r.length;s>l;l++)l在r&&n中(l,e,e,e,t,t,t,t,t,r,r,a);其他如(对象“==r的类型)为(var c中的c中的r)r.HaOOwnPropert(c)和n(c,e,e,e,e,e,e,e,e,e,e,r,e)为(r)为(r)为(r)或(B)为(r)为(r)为(r)或(r)为(r)为(r)为(r)或(r)为(r)为(r)为(r)为(r)为r)为(r)为(r)为(r)为(r)为r)为r)为(r)为r)为(r)为(r)为r)为(r)为r)为r)为(r)为(r)为r)为(r)为r)为(r)为r)为r)为r)为r)为(r l=0>l?Math.max(0,l+n):Math.min(n,l),s=0>s?Math.max(0,s+n):Math.min(n,s)为(var o=l;s>o;s>o;o+=c)P.trace(o+““+t,r,a)},评估:功能(x,U v,U v,U v名){try(r,s,s)为(var o=l,s,s,s,s,s)为(var)为(var)为(var)为(var)为(var)为(var)为(var)为(var)为(var)为(var)为(var)为(var)为(var)为(var.tratratratrac)trac)跟踪(o)跟踪(o(o)跟踪(o)跟踪(o(o“““““;;”””””;;;;;;””;”;”;““““““““;””;”;””;”;”;”;”,t,t,(P.trace(P.normalize(expr).replace(/^\$;/,“”),obj,“$”),P.result.length?P.result:!1):无效0}
//我已经向JSONPath添加了一些扩展
var jsonPathStore=函数(对象、路径、值){
var maps=jsonPath(obj,path,{resultType:“path”})
map.map(函数(项、索引){
返回eval(“(“+item.replace(/\$/,“obj”)+”=“+values[index]+”)”);
})
}
var jsonPathDelete=函数(obj,路径){
var maps=jsonPath(obj,path,{resultType:“path”})
map.map(函数(项、索引){
返回eval(“(“+”删除“+项.替换(/\$/,“obj”)+”));
})
}
var jsonPathRead=函数(obj,路径){
var maps=jsonPath(obj,path,{resultType:“path”})
返回maps.map(函数(项、索引){
返回评估(“(“+项目.替换(/\$/,“obj”)+”));
})
}
//////////////////////JSONPATH
风险值数据={
“did”:“00022B9A0000000010001”,
“ps”:-1,
“主机名”:“zs-dptpre-002.mr.corp.l.com”,
“IP地址”:“10.4.225.29”
};
//
//xpath所有叶表达式为/*[非(*)]
//在jspath中变成$..[?(@.length>=0)]
var jsonObjectLeafValues=
jsonPathRead(数据,“$..[?(@.length>=0)]”;
//此XPath将读取从根元素开始的所有id属性

console.log(JSON.stringify(jsonObjectLeafValues,null,2))
您有什么问题吗?使用es6,您可以使用。否则,在解析JSON字符串后,您可以像任何普通JS对象一样访问它们。您指的是“JSON字符串”如果它实际上是一个JSON字符串,你不需要从中“解析出特定的对象”——你只需要将整个JSON解析成一个JavaScript对象,然后像往常一样访问属性(而不是“字段”)。(psst…OP没有要求ES6,这就是我留下它作为注释的原因)很好,我不理解Object.keys中的代码…我如何将每个变量设置为var ipaddress=ipaddress这样的变量?在这种情况下,您可以将值设置为Object key,而不是Object value,它没有设置,
window[k]=obj[k]
更改为
window[k]=k
这是一个合理的假设,OP希望将属性引入函数的局部变量中,这是您的第二个函数(非ES6)除了不好的实践之外,way不支持。我会这么做,因为…为什么?如果您来自
XPath
/
XML
,那么只需展示另一个选项。当然最简单的解决方案是在上面的回复中,但是如果您想象一个具有类似
XML
结构的非常复杂的json,
XPath
可以产生一个非常好的结果使用
xpath
表达式访问属性的方法。只要我的两分钱。