我正在研究如何从URL获取JSON数据。我已经做了很多工作,并且了解到WordPress已经实现了不再使用的“ REST API V2”插件,所以现在每个WordPress网站默认都有其json兼容地址。昨天我找到了this tutorial,因此决定将其应用于我的项目,因为我认为这是解析和从Internet获取JSON数据的最佳方法。
因此,我已经对其进行了自定义,并且在编码中没有任何错误,但是它不会从URL中获取数据。该应用程序告诉我我没有数据,然后开始无限加载。
在Logcat加载时,我有这个:
2019-02-24 13:41:15.589 571-701/? E/SDM: scalar::adjustSourceCrop: Source crop exceeds source image size: Crop(x,y,w,h)=(0,0,720,1440) Src(x,w)=(0,0)
2019-02-24 13:41:15.589 571-701/? E/SDM: ScalarConfig::ApplyScale: Scalar library failed to configure scale data!
这是JSON url(您可以使用this viewer)。
这是我的项目-> GitHub
This是我运行该应用程序时得到的。
是否与错误的JSON网址相关联?也许我不知道整个过程如何运作。
答案 0 :(得分:0)
在您的ParseContent
类中,您假设JSON
有效负载是JSONObject
,但它是JSONArray
。您可以在JSON
viewer中进行验证。 JSON
如下所示:
[{...},{...},{...},...,{...}]
因此,您需要获得另一种读取数据的方法。请参见以下示例,如何使用org.json
库解析此JSON
:
import org.json.JSONArray;
import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
String json = Files.readAllLines(jsonFile.toPath()).stream().collect(Collectors.joining());
List<TemplateModel> infos = getInfo(json);
infos.forEach(System.out::println);
}
private static List<TemplateModel> getInfo(String response) {
JSONArray array = new JSONArray(response);
List<TemplateModel> models = new ArrayList<>(array.length());
for (Object item : array.toList()) {
Map<String, Object> map = (Map) item;
TemplateModel model = new TemplateModel();
model.setCategories(((List) map.get("categories")).get(0).toString());
model.setTitle(((Map) map.get("title")).get("rendered").toString());
model.setAuthor(map.get("author").toString());
model.setDate(map.get("date").toString());
models.add(model);
}
return models;
}
}
上面的代码显示:
TemplateModel{categories='365', title='Dai sofisti a Rousseau: quanto è democratico il televoto?', author='21', date='2019-02-24T12:02:22'}
TemplateModel{categories='235', title='Piedi screpolati e cattivo odore: tranquille, c’è la salvia', author='26', date='2019-02-24T11:14:49'}
TemplateModel{categories='495', title='Camarillo Brillo: 10 dischi più venduti della settimana 16-23 feb', author='27', date='2019-02-24T10:13:24'}
TemplateModel{categories='527', title='La Paranza dei Bambini, il pm: “La realtà è molto peggio”', author='1', date='2019-02-23T19:26:05'}
TemplateModel{categories='527', title='Festa: farò la rivoluzione ad Avellino. L’apertura a Petitto', author='11', date='2019-02-23T19:06:40'}
TemplateModel{categories='525', title='Cocaina Avellino, blitz nel parcheggio e in casa: in due nei guai', author='1', date='2019-02-23T17:42:03'}
TemplateModel{categories='525', title='Irpinia maltempo: vento abbatte alberi e pali|VIDEO e FOTO', author='23', date='2019-02-23T16:57:11'}
TemplateModel{categories='524', title='Valle del Sabato in rivolta contro fonderia: basta veleni!|VIDEO', author='38', date='2019-02-23T12:23:56'}
TemplateModel{categories='460', title='I segreti per scrivere un post di successo su Facebook', author='34', date='2019-02-23T12:19:52'}
TemplateModel{categories='525', title='Avellino, crolla albero a 2 passi dal teatro. Punto sul maltempo', author='23', date='2019-02-23T10:38:28'}
您的ParseContent.isSuccess
和ParseContent.getErrorCode
方法没有意义,因为JSON
有效负载不包含这些信息。如果您收到JSON
个有效负载,则表示它已经是OK
。
评论后编辑
如果您无法使用toList
方法,请尝试以下方法阅读JSON
:
private static List<TemplateModel> getInfo(String response) {
JSONArray array = new JSONArray(response);
List<TemplateModel> models = new ArrayList<>(array.length());
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject = (JSONObject) array.get(i);
TemplateModel model = new TemplateModel();
model.setCategories(((JSONArray) jsonObject.get("categories")).get(0).toString());
model.setTitle(((JSONObject) jsonObject.get("title")).get("rendered").toString());
model.setAuthor(jsonObject.get("author").toString());
model.setDate(jsonObject.get("date").toString());
models.add(model);
}
return models;
}