将JSON转换为字符串数组的问题

时间:2015-12-24 13:48:33

标签: java

我想将JSON文件转换为字符串。

我希望loadFromJSON()方法从JSON文件中获取以下所有内容并将其删除:

  1. 花括号

  2. 报价

  3. 冒号

  4. 逗号

  5. 支架。

  6. 然后该方法将String拆分为一个没有任何空格的String数组。

    我希望返回的字符串为:

    String worldName = "worldOne";

    然后可以分成比特,如下所示:

    int[] data = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2};

    int worldWidth = 5;

    int worldHeight = 3;

    int xSpawn = 5;

    int ySpawn = 5;

    { "gameWorlds": [ { "worldName": "worldOne", "data": [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 ], "worldWidth": 5, "worldHeight": 3, "xSpawn": 5, "ySpawn": 5 }, { "worldName": "worldOne", "data": [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 ], "worldWidth": 5, "worldHeight": 3, "xSpawn": 5, "ySpawn": 5 } ] }

    我当前的JSON文件:

    public void loadFromJSON(String fileName) {
        String tempFile = TinyFile.loadFile("file.json");
        String jsonFile =  tempFile.replaceAll("\\}", " ") + tempFile.replaceAll("\\{", " ") + tempFile.replaceAll("\"", " ") +
                tempFile.replaceAll(",", " ") + tempFile.replaceAll("\\]", " ") + tempFile.replaceAll("\\[", " ") + tempFile.replaceAll(":", " ");
        String[] tokens = jsonFile.split("\\s+");
    
        for (int i = 0; i < tokens.length; i++) {
            TinyDebug.debug("tokens", tokens[i]);
        }
    }
    

    我该怎么做?

    以下是我对该问题的尝试,该问题目前无效且需要修复。

    将JSON文件转换为字符串[]:

    public static String loadFile(String filePath) {
        StringBuilder builder = new StringBuilder();
    
        try {
            BufferedReader bReader = new BufferedReader(new FileReader(filePath));
    
            String line;
            while((line = bReader.readLine()) != null) {
                builder.append(line);
            }
    
            e.close();
        } catch (IOException e) {
            e.printStackTrace();
            Util.printErrorMessage("File Not Found");
        }
    
        return builder.toString();
    }
    

    TinyFile.java中的LoadFile():

    (let [v [1 2 3 4 5 6 7]]
      (doseq [i (range (count v))
              j (range (inc i) (count v))]
        (println (v i) (v j))))
    

    如果您有更好的解决方案,例如从JSON文件中读取的方法,请在下面发布。

2 个答案:

答案 0 :(得分:2)

您可以使用jackson库:

ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{ 'login' : 'user1', 'pass' : 'test' }";

User user = mapper.readValue(new File("~/user.json"), User.class);

然后覆盖toString()类的方法User

@Override
public String toString() {
    return "login=" + this.login + ", pass=" + this.pass;
}

答案 1 :(得分:1)

最好的方法是编写JSO类并使用Jackson解析器解析它。

您可以通过多种方式解析Json。在这里,我们使用json-simple来解析json

  1. 如果找到{,则应创建JSONObject
  2. 如果找到[,则创建JSONArray

    JSONParser解析器= new JSONParser();

    String ss = "{\"gameWorlds\":[{\"worldName\":\"worldOne\",\"data\":[0,0,0,0,0,1,1,1,1,1,2,2,2,2,2],\"worldWidth\":5,\"worldHeight\":3,\"xSpawn\":5,\"ySpawn\":5}]}";
    Object obj;
    try {
    
        obj = parser.parse(ss);
        JSONObject base = (JSONObject) obj;
        JSONArray arrayGameWorld = (JSONArray) base.get("gameWorlds");
        for (int index = 0; index < arrayGameWorld.size(); index++) {
            JSONObject worldHeight = (JSONObject) arrayGameWorld.get(index);
            Long value = (Long) worldHeight.get("worldHeight");
            System.out.println(value);
            JSONArray dataArray = (JSONArray) worldHeight.get("data");
            System.out.println(obj);
        }
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }