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
      }
    ],
  }
}
1
  • 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. Commented Jun 3, 2014 at 19:31

3 Answers 3

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];
Sign up to request clarification or add additional context in comments.

2 Comments

You would need a [0] at the end or else book would be an array.
Good point allow me to rename the result
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;

Comments

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.