Mr.X
Mr.X

Reputation: 107

Read JSON data in Java using the org/json/json/20171018 repository

I'm trying to read a JSON file in my java application using the org/json/json/20171018 repository (http://central.maven.org/maven2/org/json/json/20171018/ -> json-20171018.jar). My JSON file looks like this:

{
  "manifest_version": 2,
  "name": "Chrome Extension",
  "version": "0.1",
   "permissions": [
    "tabs"
  ],
  "content_scripts": [
    {
      "matches": [
       "<all_urls>"
      ],
      "js": ["content.js"]
    }
  ],
  "background": {
          "matches": [
              "google.de",
              "youtube.com",
              "wikipedia.de"
          ],
          "scripts": ["background.js"],
          "persistent": true
  }
}

I'm interested in the background section more specific in the links the background matches to. So I've created first a JSONObject of the whole file, then a JSONObject of the background section and then a JSONArray of the type matches. But unfortunately I'm getting this error showing up when I run the program:

Exception in thread "main" org.json.JSONException: JSONObject["matches"] not found.
    at org.json.JSONObject.get(JSONObject.java:520)
    at org.json.JSONObject.getJSONArray(JSONObject.java:714)
    at Json.main(Json.java:19)

My java code looks like this:

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Json {
    public static void main(String[] args){
        String loc = new String("chromeAdon/manifest.json");
        File file = new File(loc);
        try {
            String content = new String(Files.readAllBytes(Paths.get(file.toURI())));
            JSONObject json = new JSONObject(content);
            JSONObject json2 = new JSONObject(json.getJSONObject("background"));
            JSONArray jarray = json2.getJSONArray("matches");
            for (int i=0;i<jarray.length();i++){
                System.out.println(jarray.getString(0));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Does anyone know where my mistake is?

Upvotes: 1

Views: 7810

Answers (1)

lucasvw
lucasvw

Reputation: 1557

You are wrapping the JSON object returned by getJSONObject("background"), which is not needed.

Try just using the returned object:

JSONObject jsonContent = new JSONObject(content);
JSONObject jsonBackground = jsonContent.getJSONObject("background");
JSONArray jsonArrayMatches = jsonBackground.getJSONArray("matches");

Upvotes: 2

Related Questions