0

Driving myself crazy over the simplest thing. I have a JSON file called config.txt. The file is shown below. { "UsePipesInGuestData": true }

All I want to do is get a 2 dimensional array such that: Array[0] = UsePipesInGuestData and Array[1] = true

I have been trying for 4 hours with various attempts, my most recent is shown below: private void getConfig(){ //Function to read the config information from config.txt

    FileInputStream is;
    BufferedReader reader;

    try {
        final File configFile = new File(Environment.getExternalStorageDirectory().getPath() + "/guestlink/config.txt");
        if (configFile.exists()) {
            is = new FileInputStream(configFile);
            reader = new BufferedReader(new InputStreamReader(is));
            String line = reader.readLine();
            while (line != null) {
                line = reader.readLine();
                if(line!= null) {
                        line = line.replace("\"", "");  //Strip out Quotes
                        line = line.replace(" ", "");   //Strip out Spaces

                    if ((!line.equals("{")) || (!line.equals("}"))) {

                    } else {
                        String[] configValue = line.split(":");

                        switch (configValue[0]) {
                            case "UsePipesInGuestData":
                                if (configValue[1].equals("true")) {
                                    sharedPreferences.edit().putString("UsePipes", "true").apply();
                                } else {
                                    sharedPreferences.edit().putString("UsePipes", "false").apply();
                                }
                                break;
                        }
                    }
                }
            }
            reader.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

I cannot seem to ignore the lines with the { and } in them.

Clearly there MUST be an easier way. JAVA just seems to take an extremely large amount of code to do the simplest thing. Any help is greatly appreciated.

  • 1
    you can use Gson https://stackoverflow.com/questions/29965764/how-to-parse-json-file-with-gson – tebitoq Sep 25 '17 at 15:17
  • 3
    Possible duplicate of [How to parse JSON in Java](https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java) – Dima Kozhevin Sep 25 '17 at 15:26

1 Answers1

0

I believe your condition is incorrect. You try to read the file in the else of the condition (!line.equals("{")) || (!line.equals("}")). Simplifying, your code will run when the following happens:

!(!{ || !}) => { && } (applying De Morgan's law)

This means you will only run your code when the line is "{" AND it is "}" which is a contradiction. Try using simple conditions, like (!line.equals("{")) && (!line.equals("}")) (this is when you want to execute your code).

Additionally, you may be getting end of line characters (\n) in your string, which will make your condition fail ("{\n" != "{"). I suggest you debug and see the actual values you're getting in those lines.

Gabriel Costa
  • 341
  • 1
  • 10