为对象内的相关键/值解析JSON

Parsing JSON for related key/value within object

本文关键字:JSON 对象      更新时间:2023-09-26

假设我有一个JSON数组,每个对象包含一堆不同的键/值。我知道如何使用Javascript来针对特定的键/值,但是如果我想搜索整个JSON文件以找到一个项目,然后还在同一对象中找到一个相关的对,该怎么办?

例如,我如何扫描以下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
      }
    ],
  }
}

假设这是您的对象:

var store= {
       "book": [ 
          {...}, {...}
        ]
     }

然后你可以试着像这样过滤:

var foundBooks = store.book.filter(function(book) { return book.title ==="Moby Dick"});

@JLRiche foundBooks是一个数组。为了访问第一个匹配项,将采用与所有数组相同的方式:

var book = foundBooks[0];

您必须迭代列表,您可以创建一些自定义函数,如:

function findTitle(title) {
    for (var i = 0; i < data.store.book.length; i++) {
        if (data.store.book[i].title == title) {
            return data.store.book[i];
        }
    }
}

所以你可以这样做:

var book = findTitle("Moby Dick"),
    author = book.author;

您将遍历book对象并找到book.title === "Moby Dick",然后查看book.author以查找特定对象。