如何将 JSON 转换为 POJO class?

How to Convert JSON to POJO class?

我检查了下面的 json,它是有效的,但是 http://www.jsonschema2pojo.org/ 没有将它转换成 POJO 对象所以我可以从它获取值,我需要下面的 "nameValuePairs" 对象模型。请帮忙。提前致谢

[
       "order-chat-1",
       {
          "nameValuePairs":{
             "chat":{
                "nameValuePairs":{
                   "id":19,
                   "order_id":6,
                   "sender_id":10,
                   "receiver_id":3,
                   "message":"Hi",
                   "is_read":0,
                   "created_at":"2018-10-19 16:23:28",
                   "updated_at":"2018-10-19 16:23:28",
                   "is_sender":false
                }
             },
             "message":"Hello from chef",
             "message_type":"Message",
             "is_sender":false
          }
       }
    ]

从 Java 脚本预期来看它是有效的,但不适用于标准 Java 库,例如 GSON、Jackson 或 www.jsonschema2pojo.org 使用的任何东西。

有两件事:

  1. 上面是一个数组

  2. 该数组中有两种不同的类型 String 和 Object

只能转换为Object[]Collection<Object>(e.g.List、Set等)。 但要做到这一点,你必须有一个自定义 Serializer/Deserializer.

这是要放在 http://www.jsonschema2pojo.org/

上的代码
{
  "type":"object",
  "properties":{
    "chat":{
      "type":"object",
      "properties":{
        "nameValuePairs":{
          "type":"object",
          "properties":{
            "id": {"type": "integer"},
            "order_id":{"type": "integer"},
            "sender_id":{"type": "integer"},
            "receiver_id":{"type": "integer"},
            "message":{"type": "string"},
            "is_read":{"type": "integer"},
            "created_at":{"type": "string"},
            "updated_at":{"type": "string"},
            "is_sender":{"type": "boolean"}
          }
        }
      }

    },
    "message":{"type": "string"},
    "message_type":{"type": "string"},
    "is_sender":{"type": "boolean"}
  } 
}

生成以下 POJO,其中 Example.class 是您的根对象,根据需要更改名称。

-----------------------------------com.example.Chat.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Chat {

@SerializedName("nameValuePairs")
@Expose
private NameValuePairs nameValuePairs;

public NameValuePairs getNameValuePairs() {
return nameValuePairs;
}

public void setNameValuePairs(NameValuePairs nameValuePairs) {
this.nameValuePairs = nameValuePairs;
}

public Chat withNameValuePairs(NameValuePairs nameValuePairs) {
this.nameValuePairs = nameValuePairs;
return this;
}

}
-----------------------------------com.example.Example.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example {

@SerializedName("chat")
@Expose
private Chat chat;
@SerializedName("message")
@Expose
private String message;
@SerializedName("message_type")
@Expose
private String messageType;
@SerializedName("is_sender")
@Expose
private boolean isSender;

public Chat getChat() {
return chat;
}

public void setChat(Chat chat) {
this.chat = chat;
}

public Example withChat(Chat chat) {
this.chat = chat;
return this;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public Example withMessage(String message) {
this.message = message;
return this;
}

public String getMessageType() {
return messageType;
}

public void setMessageType(String messageType) {
this.messageType = messageType;
}

public Example withMessageType(String messageType) {
this.messageType = messageType;
return this;
}

public boolean isIsSender() {
return isSender;
}

public void setIsSender(boolean isSender) {
this.isSender = isSender;
}

public Example withIsSender(boolean isSender) {
this.isSender = isSender;
return this;
}

}
-----------------------------------com.example.NameValuePairs.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class NameValuePairs {

@SerializedName("id")
@Expose
private int id;
@SerializedName("order_id")
@Expose
private int orderId;
@SerializedName("sender_id")
@Expose
private int senderId;
@SerializedName("receiver_id")
@Expose
private int receiverId;
@SerializedName("message")
@Expose
private String message;
@SerializedName("is_read")
@Expose
private int isRead;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
@SerializedName("is_sender")
@Expose
private boolean isSender;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public NameValuePairs withId(int id) {
this.id = id;
return this;
}

public int getOrderId() {
return orderId;
}

public void setOrderId(int orderId) {
this.orderId = orderId;
}

public NameValuePairs withOrderId(int orderId) {
this.orderId = orderId;
return this;
}

public int getSenderId() {
return senderId;
}

public void setSenderId(int senderId) {
this.senderId = senderId;
}

public NameValuePairs withSenderId(int senderId) {
this.senderId = senderId;
return this;
}

public int getReceiverId() {
return receiverId;
}

public void setReceiverId(int receiverId) {
this.receiverId = receiverId;
}

public NameValuePairs withReceiverId(int receiverId) {
this.receiverId = receiverId;
return this;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public NameValuePairs withMessage(String message) {
this.message = message;
return this;
}

public int getIsRead() {
return isRead;
}

public void setIsRead(int isRead) {
this.isRead = isRead;
}

public NameValuePairs withIsRead(int isRead) {
this.isRead = isRead;
return this;
}

public String getCreatedAt() {
return createdAt;
}

public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}

public NameValuePairs withCreatedAt(String createdAt) {
this.createdAt = createdAt;
return this;
}

public String getUpdatedAt() {
return updatedAt;
}

public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}

public NameValuePairs withUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
return this;
}

public boolean isIsSender() {
return isSender;
}

public void setIsSender(boolean isSender) {
this.isSender = isSender;
}

public NameValuePairs withIsSender(boolean isSender) {
this.isSender = isSender;
return this;
}

}

我使用另一种技术来解决这个问题,我通过 Gson()Object 转换为 String,然后使用 subString 方法删除了前 16 个字符和新创建的字符串的最后一个字符,然后我将 String 转换为 POJO Object.