Lax*_*ant 3 javascript jquery json
我必须通过 JavaScript 或 jQuery 在嵌套的 JSON 中搜索一个键。在我的 JSON 对象中,所有键都是唯一的。我自己尝试了一些解决方案,但没有奏效。这是我的代码:
json = {
"app": [{
"Garden": {
"Flowers": {
"Red flower": "Rose",
"White Flower": "Jasmine",
"Yellow Flower": "Marigold"
}
},
"Fruits": {
"Yellow fruit 1": "Mango",
"Green fruit 2": "Guava",
"White Flower 3": "groovy"
},
"Trees": {
"label": {
"Yellow fruit 2": [{"type a":"Pumpkin", "type b": "Banana",..}],
"White Flower 2": ["Bogan 1", "Bogan 2", ...]
}
}],...
}
Run Code Online (Sandbox Code Playgroud)
如何在给定对象中搜索特定键?
如果我通过lookup(json, "type a")
它应该返回"Pumpkin"
,或者如果我搜索"White Flower 2"
它应该返回 ["Bogan 1", "Bogan 2", ...]
这是我的尝试,但不起作用:
function lookup(obj, k){
for (key in obj){
value = obj[key];
if (k == key) return [k, value];
if (type(value) == "Object"){
var y = lookup(value, k);
if (y && y[0]== k)return y;
}
if(type(value) == "Array"){
for (i in value)
{
var x = lookup(value[i], k);
if (x && x[0]== k)return x;
}
}
console.log(key, value);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
要查找对象的类型,我使用以下代码:
function type(object){
var stringConstructor = "test".constructor;
var arrayConstructor = [].constructor;
var objectConstructor = {}.constructor;
if (object === null) {
return "null";
}
else if (object === undefined) {
return "undefined";
}
else if (object.constructor === stringConstructor) {
return "String";
}
else if (object.constructor === arrayConstructor) {
return "Array";
}
else if (object.constructor === objectConstructor) {
return "Object";
}
else {
return "null";
}
}
Run Code Online (Sandbox Code Playgroud)
你比你想象的更近——搬出return null;
去for (key in obj)
是主要的事情;否则,一旦对象中的第一个键不匹配,您就会放弃。只有在搜索所有密钥后才放弃。
function lookup(obj, k) {
for (var key in obj) {
var value = obj[key];
if (k == key) {
return [k, value];
}
if (typeof(value) === "object" && !Array.isArray(value)) {
var y = lookup(value, k);
if (y && y[0] == k) return y;
}
if (Array.isArray(value)) {
// for..in doesn't work the way you want on arrays in some browsers
//
for (var i = 0; i < value.length; ++i) {
var x = lookup(value[i], k);
if (x && x[0] == k) return x;
}
}
}
return null;
}
var json = {
"app": [{
"Garden": {
"Flowers": {
"Red flower": "Rose",
"White Flower": "Jasmine",
"Yellow Flower": "Marigold"
}
},
"Fruits": {
"Yellow fruit 1": "Mango",
"Green fruit 2": "Guava",
"White Flower 3": "groovy"
},
"Trees": {
"label": {
"Yellow fruit 2": [{
"type a": "Pumpkin",
"type b": "Banana"
}],
"White Flower 2": ["Bogan 1", "Bogan 2"]
}
}
}]
}
function type(object) {
var stringConstructor = "test".constructor;
var arrayConstructor = [].constructor;
var objectConstructor = {}.constructor;
if (object === null) {
return "null";
} else if (object === undefined) {
return "undefined";
} else if (object.constructor === stringConstructor) {
return "String";
} else if (object.constructor === arrayConstructor) {
return "Array";
} else if (object.constructor === objectConstructor) {
return "Object";
} else {
return "null";
}
}
console.log(lookup(json, 'type a'));
console.log( lookup(json, 'White Flower 2') );
Run Code Online (Sandbox Code Playgroud)
ps 没有“JSON 对象”这样的东西。如果它不是字符串,则它不是 JSON。您正在搜索 JavaScript 对象。
归档时间: |
|
查看次数: |
9343 次 |
最近记录: |