恢复将数据放入JSONObject的顺序

时间:2012-10-01 11:13:13

标签: android json

我希望有json,因为它插入到此代码中,但它的工作原理不同!我首先想要CustomerID然后Name,但这个json首先给出Name然后CustomerID。我已经插入了json,但是为什么它会给出不同的结果请帮助我..

    JSONObject json = new JSONObject();

    try {
        json.put("CustomerID", "069C21F1-EE87-4FB4-A129-478AEAA454FF");
        json.put("Name", "Name_" + (int) Math.random() * 1000);
} catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

4 个答案:

答案 0 :(得分:10)

这是JSONObject的预期行为。根据其定义,它说:

一个对象作为一组无序的名称/值对

但是,如果您想要订购它,请执行以下操作:

1. prepare a LinkedHashMap object with elements

2. convert it to JSONObject

示例:

Map obj = new LinkedHashMap();
obj.put("a", "String1");
obj.put("b", new Integer(1));
obj.put("c", new Boolean(true));
obj.put("d", "String2");
JSONObject json = new JSONObject(obj);

修改

下载此库:

https://github.com/douglascrockford/JSON-java

将所有文件保存在项目的新包中

而不是使用 org.json.JSONObject ,使用从下载的库中添加的 your.package.JSONObject

现在打开 JSONObject.java 文件,并在构造函数中将 HashMap()更改为 LinkedHashMap()

public JSONObject(Map map)

答案 1 :(得分:1)

您可以在CustomerID行之前放置该名称以满足您自己,但这根本不会产生任何影响。因为来自json的数据是以键值对的形式提取的。它独立于它所处的顺序。

答案 2 :(得分:0)

您可以使用accumulative()

请参阅android developpers refference

答案 3 :(得分:0)

A useful answer here

Gson如果你的朋友。这会将有序地图打印成有序的JSON字符串。

我使用的是最新版本的Gson(2.3.1),您可以通过本文底部的以下选项下载。

import java.util.LinkedHashMap;
import java.util.Map;

import com.google.gson.Gson;

public class OrderedJson {
    public static void main(String[] args) {
        // Create a new ordered map.
        Map<String,String> myLinkedHashMap = new LinkedHashMap<String, String>();

        // Add items, in-order, to the map.
        myLinkedHashMap.put("1", "first");
        myLinkedHashMap.put("2", "second");
        myLinkedHashMap.put("3", "third");

        // Instantiate a new Gson instance.
        Gson gson = new Gson();

        // Convert the ordered map into an ordered string.
        String json = gson.toJson(myLinkedHashMap, LinkedHashMap.class);

        // Print ordered string.
        System.out.println(json); // {"1":"first","2":"second","3":"third"}
    }
}

依赖选项 行家

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.3.1</version>
</dependency>

<强>摇篮

compile 'com.google.code.gson:gson:2.3.1'

或者您可以访问Maven Central了解更多下载选项。