如何以正确/列出的顺序获取JSONObject值?

时间:2014-04-11 06:03:21

标签: java android json android-json

我使用Iterator<String> _names = _formObject.keys();从以下json获取值,但我得到的值没有按正确顺序排列,例如我按“姓名,号码,电话,性别”的顺序排列,我怎么能在json中得到正确的值?

{ "form" :{         
            "No" : {
                "type" : "text"
                  },
            "phone" : {
                "type" : "text"

            },
            "Name" : {
                "type" : "text"
            },
            "Sex" : {
                "type" : "radio"

             }
         }
       }

3 个答案:

答案 0 :(得分:4)

没有&#34;正确的顺序&#34;使用JSON对象中的键值对。但是,如果您手动处理JSON Reader,您将读取序列化顺序 - 这种方法有效,因为在 重构之前,处理流到对象图中(使用内部的JSONObject映射。

要访问原始 JSON阅读器,请参阅JsonReader - 但请注意无保证 等效 您获得的JSON按此顺序提供!虽然它会工作&#34;但它会根据一个(很多)等效的JSON输出产生虚假的脆弱性。

请参阅When JsonObject's keys are iterated they aren't in the same order as in the response from the server中接受的答案:

  

JSON对象的键的顺序不应该是有意义的。 如果您需要特定订单,则应使用数组,而不是对象

答案 1 :(得分:0)

if(result != null)
        {
            try
            {
                JSONObject jobj = result.getJSONObject("result");

                String status = jobj.getString("status");

                if(status.equals("true"))
                {
                    JSONArray array = jobj.getJSONArray("data");

                    for(int x = 0; x < array.length(); x++)
                    {
                        HashMap<String, String> map = new HashMap<String, String>();

                        map.put("name", array.getJSONObject(x).getString("header"));

                        map.put("date", array.getJSONObject(x).getString("date"));

                        map.put("description", array.getJSONObject(x).getString("description"));

                        list.add(map);
                    }

                }
            }
            catch (Exception e) 
            {
                e.printStackTrace();
            }
        }
        else
        {
            Toast.makeText(Calendar.this, "Network Problem", Toast.LENGTH_LONG).show();
        }

它正在从给定的JSON中读取

{
result: {
   data: [
  {
    header: "En övre rubrik här",
    date: "10 Apr,2014",
     description: "Test av en fin text. Om jag länkar. www.swerix.se Mer annat kanske.   0706300080 "
  },
  {
    header: "Info 3",
   date: "17 Apr,2014",
   description: "Detta är en ny information. Skrivet över även hej hopp"
  },
  {
  header: "testing news1",
  date: "13 Mar,2014",
  description: "this is testing news description12"
  }
  ],
  status: "true",
  description: "Data found"
}

答案 2 :(得分:-1)

你可以这样做 -

Iterator<String> _names  = _formObject.keys();
        while (_names.hasNext()) {
            String key = _names.next();
            try {
                Object value = _formObject.get(key);
                if(value.equals("No"))
                { /*Do your stuff for No*/ }

                if(value.equals("phone"))
                { /*Do your stuff for phone*/ }

                if(value.equals("Name"))
                { /*Do your stuff for Name*/ }

                if(value.equals("Sex"))
                { /*Do your stuff for Sex*/ }

            } catch (JSONException e) {

            }
        }

所以它们之前出现的顺序无关紧要。您所要做的就是使用_formObject.get(key)检查您想要的按键顺序。

请注意keys()上的jsonObject函数未按原样提供有序列表。 你必须按照这种方式建议。