【问题标题】:org.json.JSONException: No value for {...}org.json.JSONException: {...} 没有值
【发布时间】:2016-09-15 04:10:10
【问题描述】:

我不确定为什么会出现异常,但无论我的 JSON 文件中有什么,Android 似乎都无法解析它。

org.json.JSONException: No value for {"name":"Test 1"}

这是 JSON 文件,非常简单:

{"name":"Test 1"}

以及相关的Java:

    public WritingTest readTestFromFile(Context context) {
    BufferedReader bufferedReader;
    StringBuilder stringBuilder = new StringBuilder();
    String json;
    JSONObject object = new JSONObject();

    AssetManager assetManager = context.getAssets();

    try {
        bufferedReader = new BufferedReader(new InputStreamReader(assetManager.open("WritingTest1.json")));
        while ((json = bufferedReader.readLine()) != null) {
            stringBuilder.append(json);
        }
        bufferedReader.close();
        Log.v("Stringbuilder Output", stringBuilder.toString());
        String jsonString = stringBuilder.toString();
        object.getJSONObject(jsonString);

    } catch (IOException e) {
        e.printStackTrace();
        Log.e("IOException", "Something went wrong with opening the file.");
    } catch (JSONException e) {
        e.printStackTrace();
        Log.e("JSONException", "Something went wrong with JSON reader");
    } finally {
        return new WritingTest(object);
    }
}

最后是错误代码:

V/Stringbuilder Output: {"name":"Test 1"}
W/System.err: org.json.JSONException: No value for {"name":"Test 1"}
W/System.err:     at org.json.JSONObject.get(JSONObject.java:389)
W/System.err:     at org.json.JSONObject.getJSONObject(JSONObject.java:609)
W/System.err:     at com.holospring.prodigept.WritingSelectorFragment.readTestFromFile(WritingSelectorFragment.java:80)
W/System.err:     at com.holospring.prodigept.WritingSelectorFragment.onActivityCreated(WritingSelectorFragment.java:44)
W/System.err:     at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1983)
W/System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1092)
W/System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
W/System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1234)
W/System.err:     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2046)
W/System.err:     at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:174)
W/System.err:     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
W/System.err:     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237)
W/System.err:     at android.app.Activity.performStart(Activity.java:6253)
W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
W/System.err:     at android.app.ActivityThread.-wrap11(ActivityThread.java)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:     at android.os.Looper.loop(Looper.java:148)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

当然,我对 JSON 没有太多经验,它检查为有效,所以我假设它在我的 Java 代码中。

【问题讨论】:

标签: java android json exception-handling


【解决方案1】:

请查看此链接: Decoding JSON in Java

关键是您必须先解析 JSON,然后再访问字段。您所做的是创建一个空 JSONObject,然后尝试访问名称为 {"name":"Test 1"} 的字段

应该这样做:

JSONParser parser = new JSONParser();
JSONObject object = (JSONObject)parser.parse(jsonString);
String name = object.getString("name");

【讨论】:

  • 是的,我现在可以看到我做错了什么。 object.getJSONObject(jsonString);应该是 object = new JSONObject(jsonString);我的愚蠢错误。看这个太久了。
【解决方案2】:

您可以在 JsonObject 中使用 optString() 代替 getString()。您可以在下面看到详细的答案:

org.json.JSONException: No value for

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多