我有一个JSON输入,可以输入任意多个级别。
我正在提供输入样本
var d=getEntities( {"Categories": { "Facets": [ { "count": 1, "entity": "Company", "Company": [ { "entity": "Ford Motor Co", "Ford_Motor_Co": [ { "count": 1, "entity": "Ford" } ] } ] }, { "count": 4, "entity": "Country", "Country": [ { "entity": "Germany", "Germany": [ { "count": 1, "entity": "Germany" } ], "currency": "Euro (EUR)" }, { "entity": "Italy", "Italy": [ { "count": 1, "entity": "Italy" } ], "currency": "Euro (EUR)" }, { "entity": "Japan", "Japan": [ { "count": 1, "entity": "Japan" } ], "currency": "Yen (JPY)" }, { "entity": "South Korea", "South_Korea": [ { "count": 1, "entity": "South Korea" } ], "currency": "Won (KRW)" } ] }, {"count": 5, "entity": "Persons", "Persons": [ { "count": 2, "entity": "Dodge" }, { "count": 1, "entity": "Dodge Avenger" }, { "count": 1, "entity": "Major League" }, { "count": 1, "entity": "Sterling Heights" } ] } ] }});
我想使用递归将所有级别的键值“ Entity”添加到数组中,
我可以使用字符串从第一级收集数据
<html> <head> <script src="jquery.js" type="text/javascript"></script> <script type="text/javascript" src="dataDumper.js"></script> <script type="text/javascript"> var testJSON = {"Categories": { "Facets": [ { "count": 1, "entity": "Company", "Company": [ { "entity": "Ford Motor Co", "Ford_Motor_Co": [ { "count": 1, "entity": "Ford" } ] } ] }, { "count": 4, "entity": "Country", "Country": [ { "entity": "Germany", "Germany": [ { "count": 1, "entity": "Germany" } ], "currency": "Euro (EUR)" }, { "entity": "Italy", "Italy": [ { "count": 1, "entity": "Italy" } ], "currency": "Euro (EUR)" }, { "entity": "Japan", "Japan": [ { "count": 1, "entity": "Japan" } ], "currency": "Yen (JPY)" }, { "entity": "South Korea", "South_Korea": [ { "count": 1, "entity": "South Korea" } ], "currency": "Won (KRW)" } ] }, {"count": 5, "entity": "Persons", "Persons": [ { "count": 2, "entity": "Dodge" }, { "count": 1, "entity": "Dodge Avenger" }, { "count": 1, "entity": "Major League" }, { "count": 1, "entity": "Sterling Heights" } ] } ] }}; function scan(obj) { var k; if (obj.hasOwnProperty('entity')) { for (k in obj){ if (obj.hasOwnProperty(k)){ scan( obj[k] ); } } } else{ if(k=='entity') { alert(obj.entity); } } }; scan(testJSON); </script> </head> <body> </body> </html>
如何使用递归函数进入JSON字符串的内部层次?
我做了一个jsfiddle,像这样遍历JS对象中的每个对象,数组和值…
function scan(obj) { var k; if (obj instanceof Object) { for (k in obj){ if (obj.hasOwnProperty(k)){ //recursive call to scan property scan( obj[k] ); } } } else { //obj is not an instance of Object so obj here is a value }; };
我没有递归错误(在Chrome中)。你可以用这个做你想做的吗?
如果您需要测试对象是否为数组,请使用 if (obj instanceof Array)
if (obj instanceof Array)
要测试对象是否具有“实体”属性,请使用 if (obj.hasOwnProperty('entity'))
if (obj.hasOwnProperty('entity'))
要添加(或修改现有的)“实体”属性,请使用obj.entity = value或obj['entity'] = value
obj.entity = value
obj['entity'] = value