简体   繁体   中英

org.json.JSONException: No value for {…}

I'm not sure why I'm getting an exception, but no matter what I have in my JSON file, Android doesn't seem to be able to parse it.

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

Here's the JSON file, pretty simple stuff:

{"name":"Test 1"}

And the relevant 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);
    }
}

And finally the error code:

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)

Granted, I don't have much experience with JSON, it checks as valid, so I'm assuming it's something in my Java code.

Please check this link: Decoding JSON in Java

The point is that you have to parse JSON first, then access the fields. What you do is that you create an empty JSONObject and then try to access field with name {"name":"Test 1"}

Something like this should do:

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

you can use optString() instead of getString() in JsonObject. You can see the detailed answer below :

org.json.JSONException: No value for

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM