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

如何使用改型将内部json字符串解析为嵌套类

濮泳
2023-03-14

我以前使用过对嵌套类的改装,但我目前尝试使用的api有这样一种结构:

请求正文:

{
   "Id" : "a2",
   "messageCode" : 1,
   "bigNestedClass" : "{\"field1\":238,\"otherField\":246,\"ip\":\"10.255.130.154\",\"someOtherField\":15,\"Info\":1501069568}"
}

和一个类似的响应机构。

请注意,bigNestedClass是一个字符串。

我为请求和响应创建了不同的pojo类。但是,创建嵌套的BigNestedClass会使该字段如预期的那样填充为JSON对象,而不是JSON字符串。我在解析响应时也遇到了同样的问题。

我的问题:有没有一种改造方法可以将嵌套类编码、解析为字符串?

我使用改装2.0
我使用gson(可以更改)

共有1个答案

施知
2023-03-14

使用gson,我只需使用TypeAdapter即可。请参见下面的课程:

public class MyTypeAdapter extends TypeAdapter<BigNestedClass> {

    private Gson gson = new Gson();

    @Override
    public BigNestedClass read(JsonReader arg0) throws IOException {
        // Get the string value and do kind of nested deserializing to an instance of
        // BigNestedClass
        return gson.fromJson(arg0.nextString(), BigNestedClass.class);
    }

    @Override
    public void write(JsonWriter arg0, BigNestedClass arg1) throws IOException {
        // Get the instance value and insted of normal serializing make the written
        // value to be a string having escaped json
        arg0.value(gson.toJson(arg1));
    }

}

然后您只需要向gson注册MyTypeAdapter,如:

private Gson gson = new GsonBuilder()
    .registerTypeAdapter(BigNestedClass.class, new MyTypeAdapter())
    .create();

要进行改装以使用它,您需要在创建它时再做一点:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://api.example.com")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
 类似资料:
  • 我正在编写一个接收SQS队列对象的Lambda函数。SQS将json对象作为字符串值发送给SQS。 当我在Lambda中接收到请求时,AWS已经将其包装成一个新的JSON,由于JSON是一个字符串值,因此它将成为无效的JSON。 现在body.message不是有效的JSON。我尝试将它解析为一个原始值,比如如何使用Jackson在对象中包含原始JSON?但它总是抱怨,它在期待逗号分隔对象的地方找

  • 我已经试过各种方法来解决这个问题了。但没有成功。 我有几节这样的课 在这种情况下,T可以是任何对象,并且应该可以在运行时解析。 Jackson真的无法将json反序列化为泛型类型吗?

  • 问题内容: 我有一个与此对象相似的JSON对象: 现在,我想将“ name”和“ mother”解析为该结构: 我想用struct标签指定JSON字段名称,但是我不知道该用什么作为标签,因为它不是我感兴趣的顶级对象。我在软件包文档中也没有找到关于此的任何内容博客文章JSON和Go。我还测试,和。 问题答案: 遗憾的是,与包不同,该包没有提供访问嵌套值的方法。您需要创建一个单独的Parents结构或

  • 你知道这是怎么回事吗?

  • 问题内容: 我具有以下值: 和以下类: 我想将其解析为a 或a 使用Jackson的 方法最简单? 问题答案: 我终于明白了:

  • 我有一个json文件。 我需要将它转换为String的ArrayList。如何使用Jackson库? UPD2: