当前位置: 首页 > 知识库问答 >
问题:

将JSON数据解析为类

方夜洛
2023-03-14

类:

public class MyList {

    public int type;
    public String text;
    public boolean[] arr;

    public MyList(int type, String text) {
        this.type = type;
        this.text = text;
        switch (type) {
        case 0:
            arr = new boolean[5];
            break;
        case 1:
            arr = new boolean[10];
            break;
        }
    }
}

JSON数据:

{“列表”:[{“类型”:0,“文本”:“文本1”},{“类型”:1,“问题”:“文本2”}]}

ArrayList<MyList> getList(){
    Gson gson = new Gson();
    MyListsArray mLists = gson.fromJson(bufferString, MyListsArray.class);
    return mLists.list;
}

类来保存列表项:

public class MyListsArray {
    public ArrayList<MyList> list;
}

一切顺利,我为JSON字符串中的type和text获得了正确的值。但逮捕仍为空。

共有1个答案

顾琛
2023-03-14

您可以启动Json字符串中不存在的数据,如下所示编写CustomDeserializer

class CustomDeserializer implements JsonDeserializer<List<MyList>> {

    @Override
    public List<MyList> deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {

       JsonArray jsonArray =    jsonElement.getAsJsonObject().getAsJsonArray("list");

       List<MyList>  list=new ArrayList<>(30);
       Gson gson = new Gson();

       for (JsonElement element : jsonArray) {

                MyList ob =  gson.fromJson(element,  MyList.class);
                switch (Integer.valueOf(ob.type)) {
                case 0:
                    ob.arr = new boolean[5];
                    break;
                case 1:
                    ob.arr = new boolean[10];
                    break;
                }

               list.add(ob);
        }

        return list;
    }

最后解析它

 Type typeOf = new TypeToken   <List<MyList>>(){}.getType();
 Gson gson = new GsonBuilder().registerTypeAdapter(typeOf, new CustomDeserializer()).create();
 List<MyList> list = gson.fromJson(builder.toString(),typeOf);

Gson文档说,如果您的类没有一个无参数构造函数,并且您没有注册任何InstanceCreater对象,那么它将使用UnsafeAllocator创建一个ObjectConstructor(它构造您的对象),该UnsafeAllocator使用反射获得类Sun.Misc.Unsafe的allocateInstance方法来创建您的类的实例。

yourClassType.getDeclaredConstructor(); // ie. empty, no-args
 类似资料:
  • 我正在尝试将上面的JSON解析为数据结构。我最初使用Gson,但大多数解决方案建议创建一个反映我的Gson结构的类结构并使用fromJson(String, Class),但我不想这样做,因为JSON的结构可能会改变,我不想每次都格式化我的类。

  • 问题内容: 我正在尝试解析一个包含JSON数据的文件: 由于这是带有动态键的JSON数组,因此我认为我可以使用: 但是,我无法使用来解析文件: 将包含JSON数据的文件解析为Go结构的最简单方法是将数组(仅字符串类型转换为字符串类型)? 编辑: 要进一步详细说明可接受的答案-的确,我的JSON是地图数组。为了使我的代码正常工作,该文件应包含: 然后可以将其读入 问题答案: 这是因为您的json实际

  • 问题内容: 我正在使用Weather Underground API制作应用程序,但在解析与严重警报有关的代码块时遇到了麻烦。JSON使用具有子键值对的键值对- 这对我来说不是问题,因为我可以从中选出后续的NSDictionary-但严重警报的条目被证明是有问题的。见下文: “警报”对与我已经解析的其他对有所不同,因为它在子值周围有这个 []括号 ,而且我不确定如何清除它,以便可以访问子值。在我能

  • 问题内容: 我在MongoDB中的规范化数据模型结构中遇到以下错误: 这是由于以下原因造成的: 具体的部分。我的文档中有一个DBRef对象,因此我可以引用另一个集合中的文档。嵌入式文档结构不是选项。那么我该如何解决呢? 问题答案: 您必须为其导入DBRef编解码器才能进行打印,如果您希望以文档json样式进行打印,则需要编写自己的DBRef编解码器,并将其添加到您给toJson()的编解码器中。

  • 问题内容: 我有一个XML文件,例如 如何将其解析为JSON结构文件? 问题答案: 对于一个简单的解决方案,我建议使用Jackson库,它是一个Java库,用于生成和读取带有XML扩展名的JSON,因为它只需几行简单的代码就可以将任意复杂的XML转换为JSON。 input.xml Java代码: 该演示使用Jackson 1.7.7 (较新的1.7.8也可以使用),Jackson XML Dat

  • 我正在尝试使用jQuery将此对象转换为数组 我试图得到这样的数组输出: 怎样?