如何根据字符串值查找 JSON 对象成员

Posted

技术标签:

【中文标题】如何根据字符串值查找 JSON 对象成员【英文标题】:How to find a JSON object member based on a string value 【发布时间】:2012-08-15 07:35:28 【问题描述】:

假设我有一个这样的 JSON 文件:

 "store": 
"book": [ 
   "category": "reference",
    "author": "Nigel Rees",
    "title": "Sayings of the Century",
    "price": 8.95
  ,
   "category": "fiction",
    "author": "Evelyn Waugh",
    "title": "Sword of Honour",
    "price": 12.99
  ,
   "category": "fiction",
    "author": "Herman Melville",
    "title": "Moby Dick",
    "isbn": "0-553-21311-3",
    "price": 8.99
  ,
   "category": "fiction",
    "author": "J. R. R. Tolkien",
    "title": "The Lord of the Rings",
    "isbn": "0-395-19395-8",
    "price": 22.99
  
    ]
  

我想要做的是获取“book”的成员及其所有字符串值对,其中标题为“Sword of Honour”。我怎么能用 JQuery 做到这一点?问题是我不知道成员的索引 ID,如果我知道这将是微不足道的,即 store.book[1].XXX 会给我我正在寻找的所有兄弟键值对的值为。

有什么想法可以用最少的代码做到这一点吗?

【问题讨论】:

这不是 json。这是纯 js 对象。 Json 是一种文本表示。 @RoyiNamir 实际上这 is 合法 JSON - 提示是键周围的引号。但是我怀疑 OP 不需要知道如何解码 JSON。 @Alnitak Json 是一种文本表示。 '"a":3' 不是 "a":3 其实我只是.ajax,数据类型为jsonp。所以它将 JSON 解码为我的 JS 代码。我只是想包含我正在处理的内容的文本表示来澄清我的问题。 @Alnitak 我的错。 (我的误解)对不起。 【参考方案1】:

使用数组filter:

var matches = store.book.filter(function(val, index, array) 
    return val.title === 'Sword of Honour';
);

结果将是一个包含与过滤谓词匹配的所有book 元素的数组。

注意:这是一种 ES5 方法。对于非 ES5 浏览器,链接的 MDN 页面上有一个 shim。

【讨论】:

json转换器在哪里? @RoyiNamir 什么 JSON 转换器? OP 显然已经解码了 JSON。 我不明白,好像他已经这样做了(我仍然认为他没有) 谢谢。那行得通。但我设法将我的代码更改为只获取每个元素的数组索引值而不是标题并使用它。这在无法获取索引号的情况下仍然很有用。 获取其他值 console.log(matches[0].category); console.log(匹配[0].author); console.log(matches[0].price);【参考方案2】:
function returnMatchedbook(store) 
    for(var i = 0; i < store.book.length; i++) 
        if(book[i].title == 'Sword of Honour') 
            return book[i];
        
    
 

【讨论】:

嘿,我更新了答案。它将从商店返回匹配的书

以上是关于如何根据字符串值查找 JSON 对象成员的主要内容,如果未能解决你的问题,请参考以下文章

HiveQL:如何编写查询以根据嵌套的 JSON 数组值选择和过滤记录

JS:JSON的属性名必须要加双引号吗?

JSON.stringify(),JSON.parse()

js-20170817-JSON对象

JSON 解析错误:缺少对象成员的名称

JSON对象及方法