Reading JSON from a text file

前端 未结 7 1403
隐瞒了意图╮
隐瞒了意图╮ 2021-02-09 01:30

I know of some JSON libs around and I\'m currently looking into Google-JSON but all I want to achieve is something simple and I want to know what you would suggest.

I wa

相关标签:
7条回答
  • 2021-02-09 02:04

    org.json.JSONException: Expected a ':' after a key at 148 [character 149 line 1]

    Here, your json string is invalid:

     + "'map': [ { 1,3,1,1,1,24,1,1,1,1,1,1,1 },"
    

    That creates and array with objects inside, the first object has the attributes 1,3,1 etc without value.

    Should be:

     + "'map': [ [ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],"
    

    For that to be an array with arrays inside.

    Or

    + "'map': [ { 1:0,3:0,1:0,1:... 
    

    So you can have attributes 1,3,1 etc with value 0 but... that doesn't make sense

    0 讨论(0)
  • json-lib comes with an example of converting a String to a JSON Object:

    http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JSON_formatted_string

    0 讨论(0)
  • 2021-02-09 02:06

    Install Google Gson and create those two model classes

    public class Data {
        private String name;
        private String title;
        private int currentMap;
        private List<Item> items;
        private int[][] map;
    
        public String getName() { return name; }
        public String getTitle() { return title; }
        public int getCurrentMap() { return currentMap; }
        public List<Item> getItems() { return items; }
        public int[][] getMap() { return map; }
    
        public void setName(String name) { this.name = name; }
        public void setTitle(String title) { this.title = title; }
        public void setCurrentMap(int currentMap) { this.currentMap = currentMap; }
        public void setItems(List<Item> items) { this.items = items; }
        public void setMap(int[][] map) { this.map = map; }
    }
    

    and

    public class Item {
        private String name;
        private int x;
        private int y;
    
        public String getName() { return name; }
        public int getX() { return x; }
        public int getY() { return y; }
    
        public void setName(String name) { this.name = name; }
        public void setX(int x) { this.x = x; }
        public void setY(int y) { this.y = y; }
    }
    

    And convert your JSON as follows:

    Data data = new Gson().fromJson(json, Data.class);
    

    To get the title just do:

    System.out.println(data.getTitle()); // Map One
    

    And to get the map item at x=3 and y=3:

    System.out.println(data.getMap()[3][3]); // 1
    

    And to get the name of the first Item:

    System.out.println(data.getItems().get(0).getName()); // Pickaxe
    

    Easy! Converting the other way on is also simple using Gson#toJson().

    String json = new Gson().toJson(data);
    

    See also this answer for another complex Gson example.

    0 讨论(0)
  • 2021-02-09 02:08

    You can do this just fine with google-gson. I think it'd look something like this:

    JsonParser parser = new JsonParser();
    JsonObject object = parser.parse(text).getAsJsonObject();
    
    String title = object.get("title").getAsString();
    int currentMap = object.get("currentMap").getAsInt();
    ...
    
    0 讨论(0)
  • 2021-02-09 02:11

    The Spring Framework uses Jackson, so that's a fairly good endorsement for Jackson.

    JacksonInFiveMinutes

    See the "Simple Data Binding Example" heading if you just want to use generic Maps.

    0 讨论(0)
  • 2021-02-09 02:11

    As for the error messages.

    C:\Users\Dan\Documents\readJSON\readJ.java:2: cannot find symbol
    symbol  : class json
    location: package org
    import org.json;
          ^
    

    You don't usually name your package the same way the package you want to import, although you can.

    You have to either: 1 name it different, 2.- don't put the import

    C:\Users\Dan\Documents\readJSON\readJ.java:27: cannot find symbol
    symbol  : method JSONObject(java.lang.String)
    location: class org.json.readJ
    JSONObject JsonObj = JSONObject(json);
    

    You're missing a "new" there... it should be new JSONObject(...

    0 讨论(0)
提交回复
热议问题