Java 如何以正确/列出的顺序获取JSONObject值?
我正在使用迭代器_names=_formObject.keys()从以下json中获取值,但是我获取的值没有按照正确的顺序排列,例如,我按照“姓名、否、电话、性别”的顺序获取,我如何才能获得json中的正确值Java 如何以正确/列出的顺序获取JSONObject值?,java,android,json,android-json,Java,Android,Json,Android Json,我正在使用迭代器_names=_formObject.keys()从以下json中获取值,但是我获取的值没有按照正确的顺序排列,例如,我按照“姓名、否、电话、性别”的顺序获取,我如何才能获得json中的正确值 { "form" :{ "No" : { "type" : "text" }, "phone" : { "type" : "
{ "form" :{
"No" : {
"type" : "text"
},
"phone" : {
"type" : "text"
},
"Name" : {
"type" : "text"
},
"Sex" : {
"type" : "radio"
}
}
}
你可以这样做-
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) {
}
}
Iterator\u names=\u formObject.keys();
而(_names.hasNext()){
字符串键=_name.next();
试一试{
对象值=_formObject.get(键);
如果(值等于(“否”))
{/*不做你的事*/}
如果(值等于(“电话”))
{/*为手机做你的事*/}
if(value.equals(“Name”))
{/*为Name做你的事*/}
如果(值等于(“性别”))
{/*为性做你的事*/}
}捕获(JSONException e){
}
}
所以它们之前出现的顺序并不重要。您所要做的就是使用\u formObject.get(key)
检查您希望按哪个顺序使用哪个键
请注意,jsonObject
上的keys()
函数并没有按原样给出有序列表。
您必须按照建议的方式进行操作。对象中的键值对没有“正确的顺序”。但是,如果手动处理JSON读取器,您将读取序列化顺序-这种方法有效,因为在将流重构为对象图(在内部使用JSONObject的映射)之前对其进行处理
要访问原始JSON读取器,请参阅-但是,请注意,不能保证您获得的任何等效JSON都是按此顺序提供的!虽然它“会起作用”,但它基于一个(或多个)等效JSON输出创建了一个假脆性
请参见以下内容中的公认答案:
JSON对象的键顺序应该没有意义如果需要特定顺序,应使用数组,而不是对象
它基于您的响应。JSON不知道对象成员键的顺序(RFC 7159,第4节)@achiles我将JSON存储在我的文件存储中。那么只有我解析了,所以不可能基于响应进行解析,请看:
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();
}
{
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"
}