Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.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
如何使我的JSON在java中变得更好?严格使用-org.json.json_Java_Json_String_List - Fatal编程技术网

如何使我的JSON在java中变得更好?严格使用-org.json.json

如何使我的JSON在java中变得更好?严格使用-org.json.json,java,json,string,list,Java,Json,String,List,目前这一产出 { "age": "20", "name": "timmy", "idList": [ { "houseId": "5", "jobId": "123" } ] } 正如你所看到的,懒汉不是我想要的。我试着玩弄它,但什么也没用。有人知道这个标准json库是否可以做到这一点吗?或者eclipse拥有的任何其他我不必单独下载的库,比如jackson或gson,在创建JS

目前这一产出

{
    "age": "20",
    "name": "timmy",
    "idList": [
        {
            "houseId": "5", 
            "jobId": "123"
        }
    ]

}
正如你所看到的,懒汉不是我想要的。我试着玩弄它,但什么也没用。有人知道这个标准json库是否可以做到这一点吗?或者eclipse拥有的任何其他我不必单独下载的库,比如jackson或gson,在创建JSON对象时不要使用toString。在创建整个JSON的最后执行一次

在您的代码中,应该是:

{
    "age": "20",
    "idList": ["{\n    \"houseId\": \"5\",\n    \"jobId\": \"123\"\n}"],
    "name": "timmy"
}
以下代码:

ids.add(jsonIds);
印刷品:

import org.json.JSONArray;
import org.json.JSONObject;

public class OrgJsonApp {
  public static void main(String[] args) {
      JSONObject root = new JSONObject();
      root.put("name", "timmy");
      root.put("age", "20");


      JSONObject ids = new JSONObject();
      ids.put("jobId", "123");
      ids.put("houseId", "5");

      JSONArray idList = new JSONArray();
      idList.put(ids);

      root.put("idList", idList);

      System.out.println(root.toString(4));
  }
}
更改数组的格式并不容易,需要扩展基类。最简单的方法是创建org.json包:

然后打印:

JSONArray idList = new JSONArrayIndent();
但我不确定它是否值得,因为JSON缩进不会改变客户机-服务器通信中的任何内容。此外,我们应该尽可能地减小JSON负载,并仅在需要时对其进行格式化。

在创建JSON对象时不要使用toString。在创建整个JSON的最后执行一次

在您的代码中,应该是:

{
    "age": "20",
    "idList": ["{\n    \"houseId\": \"5\",\n    \"jobId\": \"123\"\n}"],
    "name": "timmy"
}
以下代码:

ids.add(jsonIds);
印刷品:

import org.json.JSONArray;
import org.json.JSONObject;

public class OrgJsonApp {
  public static void main(String[] args) {
      JSONObject root = new JSONObject();
      root.put("name", "timmy");
      root.put("age", "20");


      JSONObject ids = new JSONObject();
      ids.put("jobId", "123");
      ids.put("houseId", "5");

      JSONArray idList = new JSONArray();
      idList.put(ids);

      root.put("idList", idList);

      System.out.println(root.toString(4));
  }
}
更改数组的格式并不容易,需要扩展基类。最简单的方法是创建org.json包:

然后打印:

JSONArray idList = new JSONArrayIndent();
但我不确定它是否值得,因为JSON缩进不会改变客户机-服务器通信中的任何内容。此外,我们应该尽可能地减小JSON负载,并仅根据需要对其进行格式化。

org.JSON类只允许您设置起始缩进级别和每个级别的空间数。就这样

正如您所发现的,您无法通过格式化嵌套数组并将它们缝合在一起来解决问题。org.json API不支持这一点

我试着寻找能提供更好、更灵活、更漂亮打印的替代品。如果说有什么区别的话,GSON的灵活性甚至更低。相比之下,Jackson库提供了一个PrettyPrinter接口和基类,您可以使用这些接口和基类实现自己的定制漂亮打印机。然后可以使用自定义类实例化ObjectWriter

org.json类只允许您设置起始缩进级别和每个级别的空格数。就这样

正如您所发现的,您无法通过格式化嵌套数组并将它们缝合在一起来解决问题。org.json API不支持这一点


我试着寻找能提供更好、更灵活、更漂亮打印的替代品。如果说有什么区别的话,GSON的灵活性甚至更低。相比之下,Jackson库提供了一个PrettyPrinter接口和基类,您可以使用这些接口和基类实现自己的定制漂亮打印机。然后可以使用自定义类实例化ObjectWriter

不完全是我想要的。看起来比我的好,但数组括号不是4行@bob它不仅比你的好,它是你想要的正确JSON,而你的不是,它破坏了嵌套对象。格式化有那么重要吗?@bob,数组如何输出到JSON是在JSONArray.write方法中定义的。若你们在数组中有一个元素,它如示例所示,当你们有两个或更多的对象时,它是你们想要的。哦,我明白了,它是按预期工作的。是否要修复此问题1?除非这也是1元素json的正确json格式,否则这不是我想要的。看起来比我的好,但数组括号不是4行@bob它不仅比你的好,它是你想要的正确JSON,而你的不是,它破坏了嵌套对象。格式化有那么重要吗?@bob,数组如何输出到JSON是在JSONArray.write方法中定义的。若你们在数组中有一个元素,它如示例所示,当你们有两个或更多的对象时,它是你们想要的。哦,我明白了,它是按预期工作的。是否仍要修复此1阵列问题?除非这也是1元素json的正确json格式