【问题标题】:Integer cannot be converted to JSONObject整数无法转换为 JSONObject
【发布时间】:2018-10-19 20:59:38
【问题描述】:

我目前在异步任务中使用来自 Wikipedia api 的查询搜索来获取数据。一切正常,但维基百科查询返回一个数字作为 json 中的键,我无法以编程方式将其转换为字符串。

维基百科查询网址:Wikipedia query

异步任务:

Log.i(Config.TAG, result);
String query = data.getString("query");
JSONObject pagesObj = new JSONObject(query);
String pages = pagesObj.getString("pages");
JSONObject page = new JSONObject(pages);
String pageID = (String) page.names().get(0);
String message = null;
String title = null;
    if (Integer.parseInt(pageID) == -1){
        title = "No User found";
        message = "It seems that this User does not have a Wikipedia Article yet.";
    } else {
        JSONObject part = new JSONObject(pageID);
        title = part.getString("title");
        message = part.getString("extract");
    }

错误日志:

05-09 16:38:10.650 25295-25323/org.mypackage.name W/System.err:     at org.json.JSON.typeMismatch(JSON.java:111)
    at org.json.JSONObject.<init>(JSONObject.java:163)
    at org.json.JSONObject.<init>(JSONObject.java:176)
05-09 16:38:10.651 25295-25323/org.mypackage.name W/System.err:     at org.mypackage.name.classes.GetContent.doInBackground(GetContent.java:117)
    at org.mypackage.name.classes.GetContent.doInBackground(GetContent.java:26)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
05-09 16:38:10.652 25295-25323/org.mypackage.name W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
05-09 16:38:10.653 25295-25323/org.mypackage.name W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

有没有办法将给定的整数转换为字符串,或者我的代码有问题?

提前谢谢你

【问题讨论】:

    标签: java android json


    【解决方案1】:

    也许更好的方法是使用杰克逊? 类似的东西

    ObjectMapper mapper = new ObjectMapper();
    JsonNode node = mapper.readTree(data);
    title = node.get("query").get("pages").get(0).get("title");
    message = node.get("query").get("pages").get(0).get("message")
    

    【讨论】:

    • 谢谢。比我想象的要容易得多。我只需要将代码中的 .get(0) 替换为我的 pageID
    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 2013-06-30
    • 2012-12-12
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多