Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Arezth
Visitor

Access values after ParseJson are not in order

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.
0 Kudos
5 REPLIES 5
belltown
Roku Guru

Re: Access values after ParseJson are not in order

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.
0 Kudos
NB_
Roku Guru

Re: Access values after ParseJson are not in order

... if you use the .keys() method however, magic happens (keys() returns a sorted array):
 for each category in json.keys()
0 Kudos
Arezth
Visitor

Re: Access values after ParseJson are not in order

Thank you both for you answer, I ended up using .keys() to sort out the problem.
0 Kudos
producer1
Reel Rookie

Re: Access values after ParseJson are not in order

Help, I cannot figure out how to use the .keys method to achieve that result. 

0 Kudos
producer1
Reel Rookie

Re: Access values after ParseJson are not in order

How did you end up using .keys() to sort out the problem. Please post code I am having the same issue. 

0 Kudos
Need Assistance?
Welcome to the Roku Community! Feel free to search our Community for answers or post your question to get help.

Become a Roku Streaming Expert!

Share your expertise, help fellow streamers, and unlock exclusive rewards as part of the Roku Community. Learn more.