2

I have a bunch of json files that I need to read and save as a text file. The problem is the names of the keys in each json file differs. I've seen the use of the function Object.keys to obtain the key names, but, for example, in such a file:

    {
        "mainKey1" : 
        [
            {
                "subKey1" : "Value 1",
                "subKey2" : "Value 2",
                "subKey3" : "Value 3"
            },
            {
                "subKey1" : "Value 1",
                "subKey2" : "Value 2",
                "subKey3" : "Value 3"
            }
        ],

        "mainKey2" : 
        [
            {
                "subKey1" : "Value 1",
                "subKey2" : "Value 2",
                "subKey3" : "Value 3"
            },
            {
                "subKey1" : "Value 1",
                "subKey2" : "Value 2",
                "subKey3" : "Value 3"
            }
        ]
    }   

How could I get the names "mainKey1","mainKey2", and so on, and also "subKey1", subKey2", and so on.

Finally, after obtaining these key names, how could I use them to read the corresponding "Value1", "Value2", "Value3".

Thanks in advance!

2
  • Why don't use JSON.parse w3schools.com/js/js_json_parse.asp? Commented May 21, 2017 at 11:53
  • Does your question include reading and writing json files? Or just the bit about getting the object keys/values? Commented May 21, 2017 at 11:54

2 Answers 2

7

You can use Object.keys(obj) to get the keys:

var obj = {"mainKey1" : 
        [
            {
                "subKey1" : "Value 1",
                "subKey2" : "Value 2",
                "subKey3" : "Value 3"
            },
            {
                "subKey1" : "Value 1",
                "subKey2" : "Value 2",
                "subKey3" : "Value 3"
            }
        ]
}

var keys = Object.keys(obj);
console.log(keys[0]);


var subkeys = Object.keys(obj[keys[0]][0]);
console.log(subkeys);
console.log(subkeys[0]);
console.log(obj[keys[0]][0][subkeys[0]]);

Just toss that into a foreach loop to go through each available key/subkey and you can get the information you're looking for.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks a million, ChrisD. This really helped me. I've been trying to wrap my head around this thing for some time now, and this is the best illustration yet. Much obliged.
1
 var obj = {
  "mainKey1": [{
             "subKey1": "Value 1",
             "subKey2": "Value 2",
             "subKey3": "Value 3"
         },
         {
             "subKey1": "Value 1",
             "subKey2": "Value 2",
             "subKey3": "Value 3"
         }
     ],

     "mainKey2": [{
             "subKey1": "Value 1",
             "subKey2": "Value 2",
             "subKey3": "Value 3"
         },
         {
             "subKey1": "Value 1",
             "subKey2": "Value 2",
             "subKey3": "Value 3"
         }
     ]
 };

This will print all the values from above object.

for (var key in obj) {
     var innerArray = obj[key];
     for (var arrayKey in innerArray) {
         var innerObj = innerArray[arrayKey]
         for (var innerKey in innerObj) {
              console.log(innerKey,innerObj[innerKey]);
         }
     }
 }

running example - https://jsfiddle.net/voxf7do6/1/

1 Comment

Thanks Arvind; really useful example. I've been struggling with JSON for a long time now, and I just needed to get a handle on the keys and stuff.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.