将未标记的 JSON 字符串解析为 java 对象

运营管理

我下面有一个 JSON 字符串,我必须将其解析为 java 对象。挑战在于值没有标记,而且还有一个集合没有标记每组值。请协助或参考类似的例子。

{
"body": {
    "records": [
        ["567567/0001", "1499669323", "2806", "676768775", "258596", [
            ["collection/Coin", "AZR", "456.65", "0"]
        ]],
        ["456456/0001", "1499669327", "2806", "6767687565", "252256", [
            ["collection", "AZR", "3940.00", "13"],
            ["collection/Coin", "AZR", "89.63", "0"]
        ]],
        ["354645/0001", "1499669330", "2806", "6767687878", "25452212", [
            ["collection", "AZR", "3940.00", "13"],
            ["collection/Coin", "AZR", "125.36", "0"]
        ]],
        ["4654/0001", "1499669333", "2806", "676768787", "2514785", [
            ["collection", "AZR", "4560.00", "21"],
            ["collection/Coin", "AZR", "987.25", "0"]
        ]]
    ]
},
"responseCode": 0,
"responseMsg": "OK"
}

我想将 JSON 字符串解析成的类如下

public class Record {
    private String cdmId;
    private Integer transactionNumber;
    private String collectorUserNumber;
    private String collectionStartTime;
    private String sealNumber;

    private List<CollectionType> collection;

    // getters and setters
}

集合类型类

public class CollectionType {

    private String type;
    private String currency;
    private Double totalAmount;
    private Integer totalPcs;

    // getters and setters
}
阿德里安·法玛丁

在GSON你有三种选择如何在描述分析您的对象UserGuide

  1. 使用 Gson 的解析器 API(低级流解析器或 DOM 解析器 JsonParser)解析数组元素,然后对每个数组元素使用 Gson.fromJson()。这是首选方法。这是一个演示如何执行此操作的示例。

  2. 为 Collection.class 注册一个类型适配器,它查看每个数组成员并将它们映射到适当的对象。这种方法的缺点是它会搞砸 Gson 中其他集合类型的反序列化。

  3. 为 MyCollectionMemberType 注册一个类型适配器,并将 fromJson() 与 Collection 一起使用。

我实现了选项 3. 自定义TypeAdapter.

包含整个消息的消息类

public class Message {
    private Body body;
    private int responseCode;
    private String responseMsg;

    // getters and setters
}

正文类包含记录

public class Body {
    private List<Record> records;

    public Body() {
        records = new ArrayList<Record>();
    }

    public void addRecod(Record record) {
        records.add(record);
    }

    public List<Record> getRecords() {
        return records;
    }
}

Record 和 CollectionType 类与您发布的相同。

RecordAdapter 类来解析您的自定义集合。

public class RecordAdapter extends TypeAdapter<Record> {

    @Override
    public Record read(JsonReader reader) throws IOException {
        if (reader.peek() == JsonToken.NULL) {
             reader.nextNull();
             return null;
        }
        Record record = new Record();
        // read array representing a record
        reader.beginArray();
        record.setCdmId(reader.nextString());
        record.setTransactionNumber(Integer.valueOf(reader.nextString()));
        record.setCollectorUserNumber(reader.nextString());
        record.setCollectionStartTime(reader.nextString());
        record.setSealNumber(reader.nextString());
        // read array containing CollectionType objects
        reader.beginArray();
        while(reader.hasNext()) {
            // read array containing single CollectionTyoe object
            reader.beginArray();
            CollectionType collectionType = new CollectionType();
            collectionType.setType(reader.nextString());
            collectionType.setCurrency(reader.nextString());
            collectionType.setTotalAmount(reader.nextDouble());
            collectionType.setTotalPcs(reader.nextInt());
            record.addCollectionType(collectionType);
            // read end of array containing single CollectionTyoe object
            reader.endArray();
        }
        // read end of array containing CollectionType
        reader.endArray();
        // read end of array representing a record
        reader.endArray();
        return record;
    }

    @Override
    public void write(JsonWriter arg0, Record arg1) throws IOException {
        // TODO Auto-generated method stub

    }

}

尝试的主要方法

public static void main(String[] args) {
    String input = "<Your JSON string goes here>";
    GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapter(Record.class, new RecordAdapter());
    Gson gson = builder.create();
    Message message = gson.fromJson(input, Message.class);
    System.out.println(message);
}

GSON 依赖

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.2</version>
  <scope>compile</scope>
</dependency>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将JSON对象解析为Java中的字符串

来自分类Dev

android,gson无法将json字符串解析为java对象

来自分类Dev

android,gson无法将json字符串解析为java对象

来自分类Dev

将JSON查询字符串解析为JSON对象

来自分类Dev

将JSON查询字符串解析为JSON对象

来自分类Dev

使用linq将json字符串解析为对象

来自分类Dev

将字符串转换或解析为JSON对象

来自分类Dev

将 JSON 从字符串解析为对象

来自分类Dev

Nodejs - 将字符串解析为 JSON 对象

来自分类Dev

Java:如何将JSON字符串参数解析为字符串和数组?

来自分类Dev

Gson 无法将位于 json 对象中的 json 数组字符串解析为 JsonArray

来自分类Dev

将字符串解析为对象

来自分类Dev

将字符串解析为对象

来自分类Dev

如何使用继承/多态性将JSON字符串解析为C#对象?

来自分类Dev

将JSON字符串解析为对象数组Objective C

来自分类Dev

将包含多个json对象的字符串解析为更方便的内容

来自分类Dev

将NSDictionary的JSON字符串解析为对象数组Object C

来自分类Dev

使用 Jackson 将 Json 字符串解析为 Kotlin 对象抛出 InvalidDefinitionException

来自分类Dev

将 JSON 字符串解析为具有精确值的 javascript 对象

来自分类Dev

将Java对象存储为JSON字符串在MySQL数据库中吗?

来自分类Dev

将java对象存储为json字符串在MySQL数据库中吗?

来自分类Dev

如何将Field对象解析为字符串(Java)

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

将JSON字符串解析为C#中的JSON对象,而无需编写额外的对象类

来自分类Dev

MongoDB Java驱动程序3.2:将Json字符串解析为ArrayList <Document>

来自分类Dev

将JSON字符串解析为Java中的scala case类

Related 相关文章

  1. 1

    将JSON对象解析为Java中的字符串

  2. 2

    android,gson无法将json字符串解析为java对象

  3. 3

    android,gson无法将json字符串解析为java对象

  4. 4

    将JSON查询字符串解析为JSON对象

  5. 5

    将JSON查询字符串解析为JSON对象

  6. 6

    使用linq将json字符串解析为对象

  7. 7

    将字符串转换或解析为JSON对象

  8. 8

    将 JSON 从字符串解析为对象

  9. 9

    Nodejs - 将字符串解析为 JSON 对象

  10. 10

    Java:如何将JSON字符串参数解析为字符串和数组?

  11. 11

    Gson 无法将位于 json 对象中的 json 数组字符串解析为 JsonArray

  12. 12

    将字符串解析为对象

  13. 13

    将字符串解析为对象

  14. 14

    如何使用继承/多态性将JSON字符串解析为C#对象?

  15. 15

    将JSON字符串解析为对象数组Objective C

  16. 16

    将包含多个json对象的字符串解析为更方便的内容

  17. 17

    将NSDictionary的JSON字符串解析为对象数组Object C

  18. 18

    使用 Jackson 将 Json 字符串解析为 Kotlin 对象抛出 InvalidDefinitionException

  19. 19

    将 JSON 字符串解析为具有精确值的 javascript 对象

  20. 20

    将Java对象存储为JSON字符串在MySQL数据库中吗?

  21. 21

    将java对象存储为json字符串在MySQL数据库中吗?

  22. 22

    如何将Field对象解析为字符串(Java)

  23. 23

    将字符串解析为JSON

  24. 24

    将字符串解析为JSON

  25. 25

    将字符串解析为JSON

  26. 26

    将字符串解析为JSON

  27. 27

    将JSON字符串解析为C#中的JSON对象,而无需编写额外的对象类

  28. 28

    MongoDB Java驱动程序3.2:将Json字符串解析为ArrayList <Document>

  29. 29

    将JSON字符串解析为Java中的scala case类

热门标签

归档