【问题标题】:Android Studio issue with parsing JSON解析 JSON 的 Android Studio 问题
【发布时间】:2017-06-23 18:48:33
【问题描述】:

当我将API 放入我尝试访问https://jsonlint.com/ 时,它显示为有效。但是当试图在 android studio 中解析它时,这就是我得到的:

06-23 20:46:54.092 2420-4258/azanmute.android.com.azanmute W/System.err: org.json.JSONException: java.lang.String 类型的值无法转换为 JSONArray 06-23 20:46:54.093 2420-4258/azanmute.android.com.azanmute W/System.err: 在 org.json.JSON.typeMismatch(JSON.java:111) 06-23 20:46:54.093 2420-4258/azanmute.android.com.azanmute W/System.err: 在 org.json.JSONArray.(JSONArray.java:96) 06-23 20:46:54.093 2420-4258/azanmute.android.com.azanmute W/System.err: 在 org.json.JSONArray.(JSONArray.java:108) 06-23 20:46:54.093 2420-4258/azanmute.android.com.azanmute W/System.err: 在 azanmute.android.com.azanmute.MainActivity$SaveTheFeed.doInBackground(MainActivity.java:93) 06-23 20:46:54.093 2420-4258/azanmute.android.com.azanmute W/System.err: 在 azanmute.android.com.azanmute.MainActivity$SaveTheFeed.doInBackground(MainActivity.java:62) 06-23 20:46:54.094 2420-4258/azanmute.android.com.azanmute W/System.err: 在 android.os.AsyncTask$2.call(AsyncTask.java:305) 06-23 20:46:54.094 2420-4258/azanmute.android.com.azanmute W/System.err: 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 06-23 20:46:54.094 2420-4258/azanmute.android.com.azanmute W/System.err: 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 06-23 20:46:54.094 2420-4258/azanmute.android.com.azanmute W/System.err: 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 06-23 20:46:54.094 2420-4258/azanmute.android.com.azanmute W/System.err: 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 06-23 20:46:54.094 2420-4258/azanmute.android.com.azanmute W/System.err: 在 java.lang.Thread.run(Thread.java:761) 06-23 20:46:54.943 2993-3834/com.google.android.gms W/PlatformStatsUtil:无法检索使用和诊断设置。放弃。

引发错误的行是: JSONArray jArray = new JSONArray(jsonString);

【问题讨论】:

  • 您能否也发布您尝试解析的 JSON 字符串?
  • {"code":200,"status":"OK","data":{"timings":{"Fajr":"04:18","Sunrise":"05:31","Dhuhr":"12:22","Asr":"15:43","Sunset":"19:12","Maghrib":"19:12","Isha":"20:25","Imsak":"04:08","Midnight":"00:22"},"date":{"readable":"23 Jun 2017","timestamp":"1498243950"}}}吗?
  • @cosinepenguin 你的 JSON 无效,使用 JSON Linter 检查错误 - jsonlint.com
  • 那是我从原始问题的链接中得到的 JSON!我只是问他是不是用的!很抱歉造成混乱!
  • 是的,就是这个! JSONLint 告诉我它也是一个有效的 JSON

标签: java android json


【解决方案1】:

您必须通过以下方式解析您的 JSON 字符串:

JSONObject jObject = new JSONObject(jsonString);

【讨论】:

  • 不,他没有?他正在尝试解析 JSON 数组,而不是 JSON 对象。
【解决方案2】:

即使 JSON 由 jsonlint 服务验证,我相信 Android 仍然认为 JSON 字符串格式不正确!这个StackOverflow question 有一些关于使用 json-simple 的好信息,这可能会帮助您解析这些数据:

本质上,你需要添加:

compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1'

到你的 gradle 文件。

然后,正如Arshu 所解释的, “那么你就可以轻松解析你的 JSON 并且它不会给出任何错误。我已经为你制作了一个小示例代码来告诉你如何使用它:

import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;

JSONParser parser_obj = new JSONParser();
JSONArray array_obj = (JSONArray) parser_obj.parse("String from web service"); 

"

希望对你有帮助!

【讨论】:

  • 嘿!使用您和 Gustavo 提供的代码(我评论了他现在我的代码的样子)我再次尝试 jsonString 但仍然得到相同的错误:/ 编辑:现在不同的错误:06-23 21:56: 40.703 2447-3222/azanmute.android.com.azanmute W/System.err:位置 0 出现意外字符 (
【解决方案3】:

您尝试解析的 StringJSONObject 而不是 JSONArray,所以您应该这样做

JSONObject jsonObject = new JSONObject(jsonString);

如果您确实需要JSONArray,可以将jsonObject 添加到数组中:

JSONArray jsonArray = new JSONArray();
jsonArray.put(jsonObject);

【讨论】:

  • 谢谢。问题是我让代码在问题行之前打印了 JSON,它仍然给我 HTML 错误,但我一定要使用它,谢谢!
  • put 部分出现错误,'cannot resolve method put(org.json.JSONOBJECT)
  • jsonString = builder.toString(); JSONParser parser_obj = new JSONParser(); JSONObject jsonObject = (JSONObject) parser_obj.parse(jsonString); JSONArray jArray = new JSONArray(); jArray.put(jsonObject); Log.d("what", String.valueOf(jsonObject)); outputTimings(jArray);
  • 抱歉,回答迟了。刚才我意识到你正在开发android。我在这里运行了您的代码并且可以正常工作。我更改以匹配我所说的:删除JSONParser parser_obj = new JSONParser(); JSONObject jsonObject = (JSONObject) parser_obj.parse(jsonString); 并仅使用JSONObject jsonObject = new JSONObject(jsonString);。它必须工作。如果没有什么问题,那就不是 JSON 的东西。这是code and output。如果 JSONObject 已经直接转换 String,我认为不需要使用 JSONParser。
猜你喜欢
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多