密钥在JSON对象中自动排序

时间:2015-10-23 13:14:56

标签: android json

我有一个JSON对象,其中我有一些带键的数组:

{  
  "body":{  
    "menus":{  
      "":[  
        {  
          "name":"home",
          "label":"Home",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_global_search",
          "label":"Search",
          "headerLabel":"",
          "icon":"",
          "url":""
        }
      ],
      "Favorites":[  
        {  
          "name":"core_mini_messages",
          "label":"Messages",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_mini_notification",
          "label":"Notifications",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_mini_friend_request",
          "label":"Friend Requests",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_user",
          "label":"Members",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_album",
          "label":"Albums",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_video",
          "label":"Videos",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_blog",
          "label":"Blogs",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_classified",
          "label":"Classifieds",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_group",
          "label":"Groups",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_event",
          "label":"Events",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"core_main_music",
          "label":"Music",
          "headerLabel":"",
          "icon":"",
          "url":""
        }
      ],
      "Account Settings":[  
        {  
          "name":"user_settings",
          "label":"Settings",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"contact_us",
          "label":"Contact Us",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"privacy_policy",
          "label":"Privacy Policy",
          "headerLabel":"",
          "icon":"",
          "url":""
        },
        {  
          "name":"terms_of_service",
          "label":"Terms Of Service",
          "headerLabel":"",
          "icon":"",
          "url":""
        }
      ],
      "Help & Settings":[  
        {  
          "name":"signout",
          "label":"Sign Out",
          "headerLabel":"",
          "icon":"",
          "url":""
        }
      ]
    },
    "languages":{  
      "default":"en",
      "languages":{  
        "en":"English"
      }
    }
  }
}

我希望按照它们来自服务器的顺序迭代元素,但是键会自动按字母顺序更改它们的顺序。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我对此问题的解决方案是发送另一个对象,其中key =>值关联,数字作为键,菜单项作为值,例如

{1:"", 2:"Favorites", 3:"Account Settings", 4:"Help & Settings"}

然后我将遍历此对象并使用它以正确的顺序从原始对象中检索菜单。

答案 1 :(得分:0)

查看以前的答案,似乎有两种方法可以解决问题:

  1. 重组数据,将菜单更改为:

    ValidatorOptions.PropertyNameResolver = (type, member) => {
      if(member != null) {
         return member.Name + "Foo";
      }
      return null;
    };   
    
  2. 更改您使用HashMap的JSONObject.java文件,但LinkedHashMap应保留该顺序。这只适用于使用JSONObject.java的系统。

    {
      "menues": [
                 {"": ... },
                 {"Favorites": ... },
                 ...]}
    
  3. 我从那里得到的两个解决方案:Keep the order of the JSON keys during JSON conversion to CSV以获得更好的解释。