java - 在java中从数组列表多映射创建嵌套Json

标签 java json arraylist hashmap

我有一个数组列表多 map -

ArrayListMultimap<String, String> fcmbuildProperties = ArrayListMultimap.create();
ArrayListMultimap<String, String> scm = ArrayListMultimap.create();
//HashMap<String, String> fcmbuildProperties= new HashMap<String, String>();
fcmbuildProperties.put("name", buildName);
fcmbuildProperties.put("timestamp", buildTimeStamp);
fcmbuildProperties.put("groupId", groupID);
fcmbuildProperties.put("artifactId", artifactID);
fcmbuildProperties.put("version", version);
fcmbuildProperties.put("environment", environment);
fcmbuildProperties.put("number", patch);
fcmbuildProperties.put("artifactPath", layoutPath);
fcmbuildProperties.put("architecture", architecture);
fcmbuildProperties.put("operatingSystem", operatingSystem);
scm.put("commit",commitSha);
scm.put("url", githubUrl);
scm.put("branch", githubBranch);

这显示为 json,如下所示:

{
  "operatingSystem": [
    "rhel5"
  ],
  "artifactPath": [
    "djin/platform/cache/test/rhel5/i386/packages/test/test-1.0.0-d.284.i386.rpm"
  ],
  "artifactId": [
    "test"
  ],
  "number": [
    "284"
  ],
  "architecture": [
    "i386"
  ],
  "url": [
    null
  ],
  "version": [
    "1.0.0"
  ],
  "timestamp": [
    "6/4/15/2015/11:22:7"
  ],
  "groupId": [
    "cache"
  ],
  "environment": [
    "snapshot"
  ],
  "commit": [
    null
  ],
  "name": [
    "fcm-dummy-web"
  ],
  "branch": [
    null
  ]
}

但是我需要如何将其解析为:

{
    "name": "fcm-dummy-web",
    "url": "job/fcm-dummy-web/",
    "build": {
        "full_url": "job/fcm-dummy-web/29/",
        "number": 38,
        "url": "job/fcm-dummy-web/29/",
        "scm": {
            "url": "institutional/fcm-dummy-web",
            "branch": "origin/master",
            "commit": "989f0b78470f0dc9e262cc020e66837beef16c4e"
        },
        "artifacts": {
            "id": "test",
            "groupId": "djin/platform/cache",
            "operatingSystem": "rhel5",
            "environment": "snapshot",
            "path": "/cache/test/rhel5/i386/packages/testtest-1.0.0-d.269.i386.msi",
            "architecture": "i386",
            "version": "1.0.0"
        }
    }
}

嵌套的 json 比平面结构更多。进行此操作的有效方法是什么?

我使用 gson 从 arrayListMultimap 中生成儿子:

Gson gson = new Gson();
String jsonString = gson.toJson(fcmbuildProperties.asMap()); 

最佳答案

这取决于您使用哪个库进行 JSON 序列化。

许多库提供“ pretty-print ”,这是一个常见的属性:

Pretty printing JSON from Jackson 2.2's ObjectMapper

Pretty-Print JSON in Java

编辑:使用 Gson 很简单

Gson gson = new GsonBuilder().setPrettyPrinting().create();

创建Gson对象时。

编辑2:

public static class OuterObject {
    String name;
    String url;

    BuildProperties properties;

}

public static class BuildProperties {
    String full_url;
    int number;
    Map<String, String> scm = new HashMap<String, String>() {{
        put("url":"institutional/fcm-dummy-web");
        //etc
    }};

}

关于java - 在java中从数组列表多映射创建嵌套Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263491/

相关文章:

java - 使用 Jersey 测试 RESTful Web 服务时出现 HTTP 状态 404

java - 如何在java中的Lotus Notes中获取example@abc.com中的电子邮件ID而不是 "CN= example/OU= Server/O=company"

java - Volley 预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径处为 BEGIN_OBJECT

java - 检查 JSON 响应是否包含特定值

java - 将 ArrayList 从一个类传递到另一个类

java - 在android studios和firebase实时数据库中,有什么函数可以获取某些特定数据所属的参数的名称?

jquery - 将 JSON 数据添加到数据表

java - 使用 Jackson 序列化 TreeModel

java - ArrayList 给出错误(加上方法帮助)

java - 如何连接两个 ArrayList?