java - 使用符号而不是属性的字符串解析 JSON 结构
问题描述
我正在处理 HTTP Rest 查询。维基百科 API 返回一个 JSON。问题是维基百科返回的 JSON 结构。
https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=pizza
这是通过对 Wikipedia API 的休息请求获得的 JSON。要查看完整的 JSON,您可以单击上面的链接。
{
"parse":
{
"title":"Pizza",
"pageid":24768,
"text":{"*":"<div class=\...>"}
}
}
我会使用我没有机会测试的自定义反序列化器来解析它。尝试使用简单的 Gson 解析,如下所示返回 null;
Result res = new Gson(str,Result.class);
我创建了如下类:
public class Result
{
private Parse parse;
}
public class Parse
{
private String title;
private int pageid;
private Text text;
}
public class Text{
private String *;// what should I call this attribute.
}
我的计划是添加一个自定义反序列化器,如下所示:
public class TextBaseDeserializer implements JsonDeserializer<Text> {
@Override
public RespondentBase deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
return jsonDeserializationContext.deserialize(jsonElement.get("*"),Text.class);
}
}
我正在使用 Gson 来解析它,如下所示:
Gson tmp = new GsonBuilder().registerTypeAdapter(Text.class, new TextBaseDeserializer());
// let's assume that str is the string obtained following Rest based request from Java.
Result res = tmp.parse(str,Result.class);
我已经完成了上述所有代码来处理符号 JSON 属性。我的问题是如何解析这样的 JSON。在上面的例子中,属性是 *
解决方案
如评论中所述,您应该使用@SerializedName("*")
.
您可以随意命名该字段。我们将在star
下面命名它,但也许all
更好,因为*
可能是通配符?没关系,随便选一个你喜欢的名字。
class Text
{
@SerializedName("*")
private String star;
}
测试
String str = "{\"parse\":{\"title\":\"Pizza\",\"pageid\":24768,\"text\":{\"*\":\"<div class=\\\"mw-parser-output\\\">...</div>\"}}}";
Gson tmp = new GsonBuilder().create();
Result res = tmp.fromJson(str, Result.class);
System.out.println(res.getParse().getText().getStar());
输出
<div class="mw-parser-output">...</div>
推荐阅读
- java - 使用 Java POJO 为 rest 服务创建条件 JSON 响应
- azure - 如何在 Azure 搜索中使用 top 和 skip 来更正分页?
- error-handling - 具有故障形式的 clojure 线程宏
- python - 在另一个脚本中上传时,Numpy Masked Array 将零更改为一个巨大的数字
- xml - xpath 多个或通配符根元素
- java - Sonarqube 和 Jacoco Gradle 插件
- json - 将 json 数据转换为使用 ajax 请求响应组件
- redux - Redux 商店不更新组件道具
- html - css删除h标签中的空白
- php - 显示列的最后一个 id - ZendFramwork