繁体   English   中英

将JSON字符串转换为Java对象

[英]Convert a JSON String into Java Object

我有一个服务返回的字符串,其格式为JSON:

String message = {
    "Tickets":
            [{
                    "Type": "type1",
                    "Author": "author1",
                    "Rows":
                            [
                                {
                                    "Price": "100.0",
                                    "Date": "24/06/2016",
                                    "Amount": "10"
                                },
                                {
                                    "Type": "Comment",
                                    "Value": "some comment goes here"
                                }
                            ],
                    "ID": "165"
                }],
    "Desk": "desk1",
    "User": "user1"
}

我需要解析它并转换成Java对象。 我试图创建一个这样的dom:

public class TicketWrapper{
    private Ticket ticket;
    private String desk;
    private String user;
}

public class Ticket {
    private String type;
    private String author;
    private List<Row> rows;
    private String id;
}

public class Row1{
    private float price;
    private Date date;
    private int amount;
}

public class Row2{
    private String type;
    private float value;
}

然后,我尝试通过Google Gson解析这种方式:

TicketWrapper ticket = gson.fromJson(message, TicketWrapper.class)

但是,如果我将其打印为System.out.println(gson.toJson(ticket)) ,则会打印:{“ desk”:0,“ user”:0}

我不知道如何将Json解析为Java对象,以及如何告诉他进入“ Rows”的行可以是Row1类型或Row2类型。

正如其他人在评论中已经提到的那样,您需要确保映射直接反映文件名。 它必须是“用户”和“桌面”,而不是“用户”和“桌面”。 另外,您有一个票证列表,它将映射到“列出票证”。

我认为存在一些问题,例如小写的属性名称和dateformat以及行的混合类型。 我只是这样改变并为我工作:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import org.junit.Test;
import java.util.Date;
import java.util.List;

public class CheckTest {

    @Test
    public void thisTest() {
        Gson gson = new GsonBuilder()
                .setDateFormat("dd-MM-yyyy")
                .setPrettyPrinting()
                .create();
        String message = "{\"Tickets\":" +
                "[{\"Type\":\"type1\"," +
                "\"Author\":\"author1\"," +
                "\"Rows\":[{\"Price\":\"100.0\"," +
                "\"Date\":\"24-06-2016\"," +
                "\"Amount\":\"10\"}," +
                "{\"Type\":\"Comment\"," +
                "\"Value\":\"some comment goes here\"}]," +
                "\"ID\":\"165\"}]," +
                "\"Desk\":\"desk1\"," +
                "\"User\":\"user1\"}";
        TicketWrapper ticket = gson.fromJson(message, TicketWrapper.class);
        System.out.println(ticket.toString());
    }

    public class TicketWrapper {
        @SerializedName("Tickets")
        private List<Ticket> tickets;
        @SerializedName("Desk")
        private String desk;
        @SerializedName("User")
        private String user;
        public TicketWrapper() {
        }
    }

    public class Ticket {
        @SerializedName("Type")
        private String type;
        @SerializedName("Author")
        private String author;
        @SerializedName("Rows")
        private List<Row> rows;
        @SerializedName("ID")
        private String id;

        public Ticket() {
        }
    }

    public class Row {
        @SerializedName("Type")
        private String type;
        @SerializedName("Value")
        private String value;
        @SerializedName("Price")
        private float price;
        @SerializedName("Date")
        private Date date;
        @SerializedName("Amount")
        private int amount;

        public Row() {
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM