gpt4 book ai didi

java - 将 Json 转换为特定的类

转载 作者:行者123 更新时间:2023-12-01 04:58:28 25 4
gpt4 key购买 nike

我正在尝试从维基百科检索文本以在 Android 应用程序上使用。我正在使用Java。我想做的第一件事是检索特定文章中的各个部分,将它们显示给用户,并且当用户单击一个部分时,通过另一个 http 请求获取该部分文本。

因此,这两个请求是:

http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=sections

然后是这个:

http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=text&section=1

我的问题是:我应该创建什么样的java对象来存储信息,然后使用.fromJSON()将其转换为这些类?

感谢@NathanZ,我创建了这两个类:

public class WikiResponseSections {
String title;
List<Section> sections;
}

public class Section {
int toclevel;
String level;
String line;
String number;
String index;
String fromtitle;
int byteoffset;
String anchor;
}

但是,当我通过 Gson 将 HTTP 响应转换为这些对象,并尝试读取“标题”字段的值时,会触发一个错误:JavaNullPointerException。这是我的转换代码:

InputStream stream = null;
try {
stream = entity.getContent();
} catch (IllegalStateException e) {
Log.e("Stream","ERROR illegalstateexception");
} catch (IOException e) {
Log.e("Stream","ERROR exception");
}
reader = new BufferedReader(new InputStreamReader(stream));
GsonBuilder bldr = new GsonBuilder();
Gson gson = bldr.create();
WikiResponse = gson.fromJson(reader, WikiResponseSections.class);
if (WikiResponse != null){
Log.i("WikiResponse",WikiResponse.getTitle()); //The error triggers HERE
publishProgress();
}
else
Log.i("WikiResponse","NULL");
}

再次感谢您的帮助

最佳答案

您可以使用Google's Gson图书馆。它的工作原理如下:

InputStream source = ...; // your code to get the Json from a url
Gson gson = new Gson();
Reader reader = new InputStreamReader(source);
MyResponse response = gson.fromJson(reader, MyResponse.class);

其中 MyResponse 是您的对象。创建 MyResponse 时,为您的字段指定与 Json 字段相同的名称和类型

MyResponse 类可以如下所示:

public class MyResponse{
String title;
ArrayList<sections>;
}

public class sections{
int toclevel;
String level;
String line;
String number;
String fromtitle;
long byteoffset;
String anchor;
}



public class WikiResponseParse{
Parse parse;
public class Parse{
String title, text;
}
}

如果您无法使用 json 字段名称,因为它不符合 Java 标准:

添加以下导入:

import com.google.gson.annotations.SerializedName;

在你的类(class):

@SerializedName("*")
public String star;

关于java - 将 Json 转换为特定的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13727034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com