Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在将元素放入JSONArray之后,它们是混合的?_Java - Fatal编程技术网

Java 为什么在将元素放入JSONArray之后,它们是混合的?

Java 为什么在将元素放入JSONArray之后,它们是混合的?,java,Java,使用StringBuilder时遇到了一个问题。我需要在JSONArray中放置一个StringBuilder,但当我这样做时,我的字符串被洗牌了。我怎样才能解决这个问题 我之前的台词: [{"id":"iprod","name":"soup","categoryId":"categoryId123","categoryName":"soup","imageUrl":"c/image","price":5.0,"weight":123.0,"ingredients":["chicken","ri

使用StringBuilder时遇到了一个问题。我需要在JSONArray中放置一个StringBuilder,但当我这样做时,我的字符串被洗牌了。我怎样才能解决这个问题

我之前的台词:

[{"id":"iprod","name":"soup","categoryId":"categoryId123","categoryName":"soup","imageUrl":"c/image","price":5.0,"weight":123.0,"ingredients":["chicken","rice"],"nutrition":{"energy":{"kilojoules":123,"kilocalories":123},"fat":123,"carbohydrate":123,"protein":123},"currency":"123"}]
我的台词是:

[{"nutrition":{"protein":123,"fat":123,"carbohydrate":123,"energy":{"kilojoules":123,"kilocalories":123}},"price":5,"imageUrl":"c/image","name":"soup","weight":123,"ingredients":["chicken","rice"],"currency":"123","id":"iprod","categoryName":"soup","categoryId":"categoryId123"}]
代码:

您的字符串是JSONObject而不是JSONArray

从JSON规范

对象是一组无序的 名称/值对

JSON库可以根据需要自由地重新排列元素的顺序。GSON,一个由Google开发的用于处理JSON的Java库。它将为您保存订单:

代码如下:

import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class Test {

    public static void main(String[] args) {
        Gson gson = new Gson();

        String line = "{\"id\":\"iprod\",\"name\":\"soup\",\"categoryId\":\"categoryId123\",\"categoryName\":\"soup\",\"imageUrl\":\"c/image\",\"price\":5.0,\"weight\":123.0,\"ingredients\":[\"chicken\",\"rice\"],\"nutrition\":{\"energy\":{\"kilojoules\":123,\"kilocalories\":123},\"fat\":123,\"carbohydrate\":123,\"protein\":123},\"currency\":\"123\"}\n";

        System.out.println(line);
        JsonObject responseObject = gson.fromJson(line, JsonObject.class);
        System.out.println(responseObject.keySet());

    }

}

您的字符串不表示JSONArray[…],而是表示JSONObject{..},某些库正在使用/扩展HashMap来实现它,HashMap不保留键值对的插入顺序。可能重复:数组[chicken,rice]保持其顺序。JSON对象{key1:value1,key2:value2}的key:value对没有顺序,也不应该保持顺序。不,实际上这是JSONArray,我错过了括号。我更新我的post@Mefisto_Fell是的,但是JSONArray在索引0中存储的是JSONObject,它不需要保留键值对的顺序。是的,但是如果JSONObject中有多个对象,例如id:iprod和id:iprod1,则只保存第一个,但我需要保存所有内容,并且顺序也会保留
import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class Test {

    public static void main(String[] args) {
        Gson gson = new Gson();

        String line = "{\"id\":\"iprod\",\"name\":\"soup\",\"categoryId\":\"categoryId123\",\"categoryName\":\"soup\",\"imageUrl\":\"c/image\",\"price\":5.0,\"weight\":123.0,\"ingredients\":[\"chicken\",\"rice\"],\"nutrition\":{\"energy\":{\"kilojoules\":123,\"kilocalories\":123},\"fat\":123,\"carbohydrate\":123,\"protein\":123},\"currency\":\"123\"}\n";

        System.out.println(line);
        JsonObject responseObject = gson.fromJson(line, JsonObject.class);
        System.out.println(responseObject.keySet());

    }

}