Your Digital Media Has Never Looked So Good

 
Arezth
Topic Author
Posts: 19
Joined: Fri Mar 10, 2017 5:00 pm

Access values after ParseJson are not in order

Wed Apr 05, 2017 3:14 pm

Hi Forum,

I was wondering if anyone had a problem while accessing the values of a ParseJason by using for each. I copy and pasted the json that was returned into jsonprettyprint and it was valid, the format was as followed (cut short, but the main point is that it was valid since it was return without problem form server, and the page was able to parse it).
{
  "Category1": [
    {
      "Element1": "value1",
      "Element2": "value2",

      ..
      "ElementN": "valueN"
    },
    ...,
    {
      "Element1": "value1",
      "Element2": "value2",

      ..
      "ElementN": "valueN"
    }
  ],
"Category2": [
    {
      "Element1": "value1",
      "Element2": "value2",

      ..
      "ElementN": "valueN"
    },
    ...,
    {
      "Element1": "value1",
      "Element2": "value2",

      ..
      "ElementN": "valueN"
    }
  ],
  "Category3": [
    {
      "Element1": "value1",
      "Element2": "value2",

      ..
      "ElementN": "valueN"
    }
  ],
  "Category4": [
    {
      "Element1": "value1",
      "Element2": "value2",

      ..
      "ElementN": "valueN"
    }
  ]
}

And I am accessing the parsed json with the follwing code:
m.RowItems = createObject("RoSGNode","ContentNode")

        json = ParseJSON(list)
        for each category in json
          row = createObject("RoSGNode","ContentNode")
          row.Title = category

             for each object in json[category]
              item = createObject("RoSGNode","ContentNode")
                       
                 for each itemV in object
                 process...   
                 end for

             row.appendChild(item)
            end for
         m.RowItems.appendChild(row)
        end for

The problem is, when I have 4 rows, it access first the Category3 then 1,2 and 4. If I have 6 categories, it access 3, 6, 1, 5 , 2, 4 in that order.  Does anyone have information or knowledge on this topic? Or am I just having code issues? As far as I can see in my code, it should be OK.
 
belltown
Posts: 1465
Joined: Thu Dec 09, 2010 1:43 pm
Contact:

Re: Access values after ParseJson are not in order

Wed Apr 05, 2017 3:37 pm

An associative array has no order. If you look up the FOR EACH statement in the BrightScript Reference, it states:

Objects that have no intrinsic order (like AssociativeArray) are enumerated in apparent random order.
https://github.com/belltown/
 
User avatar
RokuNB
Posts: 465
Joined: Fri Mar 31, 2017 2:22 pm

Re: Access values after ParseJson are not in order

Wed Apr 05, 2017 5:47 pm

... if you use the .keys() method however, magic happens (keys() returns a sorted array):
 for each category in json.keys()
 
Arezth
Topic Author
Posts: 19
Joined: Fri Mar 10, 2017 5:00 pm

Re: Access values after ParseJson are not in order

Mon Apr 10, 2017 2:28 pm

Thank you both for you answer, I ended up using .keys() to sort out the problem.

Who is online

Users browsing this forum: No registered users and 11 guests