【问题标题】:How to construct JSON data in Java [closed]如何在 Java 中构造 JSON 数据 [关闭]
【发布时间】:2019-06-28 10:28:43
【问题描述】:

我想使用 Apache HttpClient 发布 JSON 请求。但是我想发送到目标系统的 Json 数据并不复杂。下面是我要发送的 json

{
  "name":"xyz",
  "id":"428",
"mailId":
  [
   "mailme@mail.com"
  ],
  "bundle1":
  {
      "opwarden":
      {
         "number":"132344345",
         "title":"title"
      }     
  }
}

在 Java 中压缩 json 数据的最佳和最简单的方法是什么?

【问题讨论】:

  • 使用许多 json 映射器之一,例如杰克逊、格森等

标签: java json http apache-httpclient-4.x


【解决方案1】:

使用 POJO 和杰克逊的 ObjectMapper

public class Data {

    private final String name;
    private final String id;
    private final List<String> mailId;
    private final List<Opwarden> bundle1;

    public Data(final String name, final String id, final List<String> mailId, final List<Opwarden>     bundle1) {
        this.name = name;
        this.id = id;
        this.mailId = mailId;
        this.bundle1 = bundle1;
    }

    public String getName() {
        return name;
    }

    public String getId() {
        return id;
    }

    public List<String> getMailId() {
        return mailId;
    }

    public List<Opwarden> getBundle1() {
        return bundle1;
    }
}

和 Opwarden:

public class Opwarden {

    private final String number;
    private final String title;

    public Opwarden(final String number, final String title) {
        this.number = number;
        this.title = title;
    }

    public String getNumber() {
        return number;
    }

    public String getTitle() {
        return title;
    }
}

您可以使用以下命令创建 JSON:

ObjectMapper objectMapper = new ObjectMapper();
Data data = new Data("xyz", "428", List.of("mailme@mail.com"), List.of(new Opwarden("132344345", "title")));
System.out.println(objectMapper.writeValueAsString(data));

输出:

{
    "name": "xyz",
    "id": "428",
    "mailId": [
        "mailme@mail.com"
    ],
    "bundle1": [
        {
            "number": "132344345",
            "title": "title"
        }
    ]
}

【讨论】:

【解决方案2】:

我会推荐使用 JACKSON 对象映射器。如果你不想重新创建上面的模型结构写pojos。

一个不错的教程可以在这里找到enter link description here

你基本上是这样使用它的:

ObjectMapper objectMapper = new ObjectMapper();
String jsonRepresentation = objectMapper.writeValueAsString( anyObject );

如上所述,anyObject 也可以是 Map 键/值,并且值也可以再次映射。

您的具体用例如下:

    ObjectMapper m = new ObjectMapper();

    Map<String, Object> input = new HashMap<String, Object>();
    input.put( "name", "xyz" );
    input.put( "id", "428" );
    input.put( "mailId", new String[] { "mailme@mail.com" } );

    Map<String, Object> opwarden = new HashMap<String, Object>();
    opwarden.put( "number", "132344345" );
    opwarden.put( "title", "title" );

    Map<String, Object> bundle1 = new HashMap<String, Object>();
    bundle1.put( "opwarden", opwarden );

    input.put( "bundle1" , bundle1 );

    String json = m.writeValueAsString( input );

【讨论】:

  • 讲的是简单的 json 数据。可以分享一下复杂 json 数据的代码 sn-p 吗?
  • 数据在开始嵌套时变得复杂。因此,例如,通过使用 HashMaps,它可以轻松嵌套对象,并且您会得到一个写成 json String 的复杂数据结构。
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 2017-06-04
  • 2018-05-23
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
相关资源
最近更新 更多