1

I am new to the web Development. I do have an json obj which is like

$scope.jsonData =     {
        "messages": {
            "A": [{
                "missingFields": [{
                    "RESPONSIBILITY": ""
                }],
                "temporaryId": 2,
                "messages": "",
                "id": 2,
                "content": ""
            }, {
                "missingFields": [{
                    "RESPONSIBILITY": ""
                }],
                "temporaryId": 3,
                "messages": "",
                "id": 3,
                "content": ""
            }, {
                "missingFields": [{
                    "RESPONSIBILITY": ""
                }],
                "temporaryId": 4,
                "messages": "",
                "id": 4,
                "content": ""
            }],
            "B": [{
                "missingFields": [{
                    "CITY": ""
                }, {
                    "PINCODE": ""
                }],
                "messages": "No Address details found.",
                "id": -1,
                "content": ""
            }]
        }
     }

Now I want to iterate through this object and I want to get the "RESPONSIBILITY" field.Here I tried like -

for (var i=0; i < $scope.jsonData.messages.length; i++) {
}

But it is giving the length of the messages as undefined. SO, and also I want to use that in the angular code . I used like -

ng-repeat="suggestion in jsonData.messages

Can any one please explain me this . I searched a lot and tried so I am asking this question.

6
  • 3
    There's no such thing as a "JSON Object" Commented Mar 9, 2018 at 14:12
  • 3
    messages is an object and not an array Commented Mar 9, 2018 at 14:12
  • Okay Thanks for the information Commented Mar 9, 2018 at 14:13
  • Also $scope.jsonobj <> $scope.jsonData Commented Mar 9, 2018 at 14:13
  • Updated code as per comments Commented Mar 9, 2018 at 14:15

2 Answers 2

3

You need to have nested loops and use Object.keys to get the key

Like:

for ( var k in jsonData.messages ) {
   jsonData.messages[k].forEach((v)=>{

       let tID = v.temporaryId || ""; //Get the temporaryId
       console.log( tID );

       v.missingFields.forEach((o)=>{
           //Object.keys(o)[0] <-- To get the first key of the object
           console.log( Object.keys(o)[0] );
       });
   });
}

To make a simplified array, you can use Object.values and map the values.

let jsonData = {
  "messages": {
    "A": [{
      "missingFields": [{
        "RESPONSIBILITY": ""
      }],
      "temporaryId": 2,
      "messages": "",
      "id": 2,
      "content": "CONTENT 1"
    }, {
      "missingFields": [{
        "RESPONSIBILITY": ""
      }],
      "temporaryId": 3,
      "messages": "",
      "id": 3,
      "content": ""
    }, {
      "missingFields": [{
        "RESPONSIBILITY": ""
      }],
      "temporaryId": 4,
      "messages": "",
      "id": 4,
      "content": ""
    }],
    "B": [{
      "missingFields": [{
        "CITY": ""
      }, {
        "PINCODE": ""
      }],
      "messages": "No Address details found.",
      "id": -1,
      "content": ""
    }]
  }
}

let simplified = Object.values(jsonData.messages).map((v) => {
  let t = [];
  v.forEach(o => {
    t.push({
      temporaryId: o.temporaryId || "",
      missingFields: o.missingFields.map((x) => Object.keys(x)[0]),
      content: o.content || ""
    });
  });
  return t;
}).reduce((c, v) => c.concat(v), []);

console.log(simplified);


Using just for loops.

var simplified = [];
for ( var k in jsonData.messages ) {
    for ( var i in jsonData.messages[k] ) {
        var temporaryId = jsonData.messages[k][i].temporaryId;
        var content = jsonData.messages[k][i].content;
        var missingFields = [];

        for ( var x in jsonData.messages[k][i].missingFields ) {
            for ( var y in jsonData.messages[k][i].missingFields[x] ) missingFields.push( y );
        }

        simplified.push({
          temporaryId: temporaryId,
          missingFields: missingFields,
          content: content
        });
    }
}
Sign up to request clarification or add additional context in comments.

30 Comments

One thing, Here How can I use this to get the temporaryId in template of html in ng-repeat="suggestion in jsonData.messages .
I added the code to access the temporaryId @ganesh
Yes, Thanks a lot.Can I ask you one more question ?
Happy to help. Sure.
Here, Now From this data I want to create one more object which will read from the way you did and will create an object. Like -
|
0
const flatten = [].concat.apply([], Object.values(jsonData.messages))
const result = [].concat.apply([], flatten.map(item => item.missingFields))

1 Comment

While this code may answer the question, providing additional context regarding how and why it solves the problem would improve the answer's long-term value.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.