Getting key/value pair from JSON object and getting variable name and value from JavaScript object.

 Hi, I had faced one issue like this. I have an JSON object but I don't know any key name but I need to get the all the key and corresponding value from JSON object using client side JavaScript. Suddenly I wondered whether it's possible or not, after that I had done lot of workaround and finally got this solution. See the below example.
  function getKeyValueFromJSON() {
    var jsonObj = {a:10,b:20,c:30,d:50};
    for(var key in jsonObj) {
      alert("Key: " + key + " value: " + jsonObj[key]);
    }
 }

 In this example I have created the one json array as string, and converted this string into JSON object using eval() function. Using for-each loop I got all the key value from jsonObj, and finally using that key I got the corresponding value.
 Finally I got the alert like this,

   Key: a value:10
   Key: b value:20
   Key: c value:30
   Key: d value:50

 During this workaround I got one more idea, using this same way I got all the variable name and corresponding value from JavaScript object. See the below example.
 This is my JavaScript class. Here I have declared a function for variable d.
   function testJavaScriptClass() {
    this.a = 10;
    this.b = 20;
    this.c = 30;
    this.d= function() {
               return "Test result from inside this function";
            };
 }


 Now I am going to create one object for this class and going to get the variable name and corresponding value from JavaScript object.

 function getKeyValueFromJSObject() {
    var testObj = new testJavaScriptClass();
    for(var key in testObj) {
      if(typeof testObj[key] != "function") {
            alert("Key: " + key + " value: " + testObj[key]);   
      }
      else {
            var value = testObj[key]();
            alert("Key: " + key + " value: " + value);
      }
    }
 }

 Here I have checked the key (variable) is whether a function or not. If it is function then, I executed the function and get the result.
 Finally I got the alert this.

  Key: a value:10
  Key: b value:20
  Key: c value:30
  Key: d value: "Test result from inside this function"

Hope this help...!

Comments

PcGeek said…
I want to get it from mongodb console
to find the field name of the second record
What if I have nested JSON like the below:

{
"cmd":"action",
"action":"find",
"params":{"strategy":"id",
"selector":"com.ebay.mobile:id/button_sign_in",
"context":"",
"multiple":false}
}
Gnanasuriyan said…
@Krishnamachari Shrikanth : For your input, we need to have recursive function.
Anonymous said…
It doesn't look like a javascript Object at all. you are simply using an array and looping thru the array.

Try looping thru this Object

var myObj = {id:1, name="joe", age=31", isAGenius=true}
Please help me on this..

JSON Response:

"CompleteResult":{
"Result1": {
"abc": 1,
"def": 2
},
"Result2": {
"abc": 3,
"def": 4
}
}

Note:
=======
I need to know the following
1) length of CompleteResult
2) how to get the value "Result1" i.e, I may have Result3 in next response, I dont know what value will be coming there. So I have to get the value dynamically
Anonymous said…
Thank you!!! So simple, so elegant. You saved lot of my time.

Sanjoy
RAJKUMAR said…
Hi can u tell me how can access and take nested json key and values
RAJKUMAR said…
Hi I have lot of json object in fouser table .For particular object say id is ObjectId("533a91b2263e03670b000009") taking means no problem working.I mean see the below map reduce concept in if condition[docid == ObjectId("533a91b2263e03670b000009")] hot coded.So working.


{
'collectionName' : 'fouser',
mapReduce : {
map : 'function () {
var docid = this._id.valueOf();


var date = this.date;
var doc = this,
rec = doc.records;
if( docid == ObjectId("533a91b2263e03670b000009") ){
var i = 0;
Object.keys(rec).forEach(function(key) {

emit (NumberInt(i), { recordid : ObjectId(key) , completed : rec[key].completed, datedue:rec[key].due});
i = i+1;
});

}
}',
reduce : 'function (key, values) {
var allDetails = [];
var user = { recordid: null, completed : null};
for( var index = 0; index < values.length; index++){
user.recordid = values[index].recordid;
user.completed = values[index].completed;
allDetails.push(user);
user = { recordid : null, completed : null};
}
return {list : allDetails}
}',
out : 'list',


},
sort:{value.completed:-1}

}


Instand of hot coding i passing dyanamically means showing error like "object.keys called on non object in object.keys Object.keys(rec).forEach(key) ".How can i resolve please help me .I'm using this inside jaspersoft

Popular Posts