var myArray = [
{
"AvailableStates": [
{
"$id": "1",
"CityID": "CA",
"Name": "California"},
{
"$id": "2",
"CityID": "NV",
"Name": "Nevada"}
],
"DefaultState": {
"$ref": "1"
}}
];
I had never seen this
$ref and $id tags before, so I didn't know how to use them or what to make of it. It turns out that in order to condense the JSON object into a smaller object, it avoids rewriting an object twice if it doesn't have to. In order to accomplish this, the JSON.NET serializer will serialize these special JSON properties of $id and $ref. Every object being serialized will get an $id. If that same exact object is used again somewhere in the same JSON object, it will use a $ref property to tell you that the particular object you're looking at has already been serialized. It then gives you the $id to lookup as the value of the $ref property so that you know where to find the object being referred to.So, that was all fine and good. I understood what they were and it made complete sense, but I didn't see how to use these special properties. So, I started reading about it to see if I could find anything helpful, but no avail, I could not find anything. I finally came across a post on StackOverflow showing how to search any object using javascript and have it return to you an array of objects that matched your search. See the function below:
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
objects.push(obj);
}
}
return objects;
}
So, I gave it a shot and it worked! Here's how to use the above function assuming a JSON array that looks like the one I have defined above in this post:
var stateName = getObjects(myArray, '$id', myArray[0].DefaultState.$ref)[0].Name;
Hopefully that helps you if you're looking for something like this.
No comments:
Post a Comment