无法从URL解析JSON无数据无限加载

时间:2019-02-24 13:46:22

标签: json wordpress parsing

我正在研究如何从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网址相关联?也许我不知道整个过程如何运作。

1 个答案:

答案 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&#8217;è 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: &#8220;La realtà è molto peggio&#8221;', author='1', date='2019-02-23T19:26:05'}
TemplateModel{categories='527', title='Festa: farò la rivoluzione ad Avellino. L&#8217;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.isSuccessParseContent.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;
}