1

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

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

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

             }
         }
       }
4

3 回答 3

4

JSON对象中的键值对没有“正确顺序”。但是,如果您手动处理 JSON 读取器,您将读取序列化顺序 - 这种方法有效,因为流在​​被重构为对象图(在内部使用 JSONObject 的 Map)之前被处理。

要访问原始JSON 阅读器,请参阅JsonReader - 但是请注意,不能保证任何等效的JSON 都按此顺序提供!虽然它“会起作用”,但它会基于一个(许多)等效的 JSON 输出产生虚假的脆弱性。

请参阅当 JsonObject 的键被迭代时接受的答案,它们的顺序与来自服务器的响应中的顺序不同

JSON 对象的键顺序不应该是有意义的。如果你想要一个特定的顺序,你应该使用一个数组,而不是一个对象

于 2014-04-11T06:09:18.950 回答
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"
}
于 2014-04-11T06:15:36.517 回答
-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()a 上的函数jsonObject不会按原样给出有序列表。您必须按照建议以这种方式进行操作。

于 2014-04-11T06:08:43.607 回答