8

This should be an easy one. I just cant figure it out.

How do I get the largest value from this piece of JSON with javascript.

{"data":{"one":21,"two":35,"three":24,"four":2,"five":18},"meta":{"title":"Happy with the service"}}

The key and value I need is:

"two":35 

as it is the highest

thanks

4 Answers 4

11
var jsonText = '{"data":{"one":21,"two":35,"three":24,"four":2,"five":18},"meta":{"title":"Happy with the service"}}'
var data = JSON.parse(jsonText).data
var maxProp = null
var maxValue = -1
for (var prop in data) {
  if (data.hasOwnProperty(prop)) {
    var value = data[prop]
    if (value > maxValue) {
      maxProp = prop
      maxValue = value
    }
  }
}
Sign up to request clarification or add additional context in comments.

3 Comments

@Insin What does hasOwnProperty mean?Why you used eval?
@systempuntoout hasOwnProperty guards against naughty libraries adding things to Object.prototype, as we don't know the full context in which this code will be executed. I used eval() as the question was asked with regard to JSON - JSON is a text format, so always takes the form of strings which conform to the specification at json.org. It could be that the question asker was confusing JSON with Object Literal Notation (there are many, many misleading tutorials/articles out there which don't help with that), which I why I made a point of using a JSON text.
@insin how to do the same thing in android?
8

If you have underscore:

var max_key = _.invert(data)[_.max(data)];

How this works:

var data = {one:21, two:35, three:24, four:2, five:18};
var inverted = _.invert(data); // {21:'one', 35:'two', 24:'three', 2:'four', 18:'five'};
var max = _.max(data); // 35
var max_key = inverted[max]; // {21:'one', 35:'two', 24:'three', 2:'four', 18:'five'}[35] => 'two'

Comments

2

This is my function for biggest key

function maxKey(a) {  
  var max, k; // don't set max=0, because keys may have values < 0  
  for (var key in a) { if (a.hasOwnProperty(key)) { max = parseInt(key); break; }} //get any key  
  for (var key in a) { if (a.hasOwnProperty(key)) { if((k = parseInt(key)) > max) max = k; }}  
  return max;  
} 

1 Comment

+1 for being the only solution that properly handles negative values properly.
0

You can also iterate the object after you parse JSON .

var arr = jQuery.parseJSON('{"one":21,"two":35,"three":24,"four":2,"five":18}' );

var maxValue = 0;

for (key in arr)
{
     if (arr[key] > maxValue)
     {
          maxValue = arr[key];   
     }
}

console.log(maxValue);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.