0

Say I have a JSON array containing an bunch of different key/values per each object. I know how to use Javascript to target a specific key/value, but what if I want to search through the entire JSON file to find an item, and then also find a related pair within that same object.

For example, how would I scan the following JSON for "Moby Dick", but then also find the author that is tied to that title?

"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
      }
    ],
  }
}
ryjohnson
  • 45
  • 5
  • 1
    Well, once you found the object whose `title` property is `"Moby Dick"`, you just access its `author` property. And you find that object by iterating over the list of objects and compare the `title` property of each of them. – Felix Kling Jun 03 '14 at 19:31

3 Answers3

2

Assuming this is your object:

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

Then you can try to filter it like this:

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

As correctly pointed out for @JLRiche foundBooks is an array. In order to access the first match it will be in the same way we do with all arrays:

var book = foundBooks[0];
Dalorzo
  • 19,834
  • 7
  • 55
  • 102
0

You'd have to iterate the list, you can create some custom functions, like so:

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];
        }
    }
}

So you can do:

var book = findTitle("Moby Dick"),
    author = book.author;
tymeJV
  • 103,943
  • 14
  • 161
  • 157
0

You would loop through your book objects and find where book.title === "Moby Dick" and then take a look at book.author for that particular object.

Benjamin Trent
  • 7,378
  • 3
  • 31
  • 41