2015-12-24 5 views
-1

Я хочу преобразовать JSON-файл в строку.Проблемы с преобразованием JSON в строковый массив

Я хочу, чтобы метод loadFromJSON(), чтобы принять все следующие из файла JSON и удалить их:

  1. фигурные скобки

  2. котировки

  3. колоны

  4. скобки.

Тогда метод разделит String на массив строк без пробелов.

Я ожидаю, что возвращаемая строка будет:

worldOne0000011111222225355worldTwo0000011111222225355

, которые затем можно было бы разделить на куски, как в следующем:

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;

Мой текущий JSON файла:

{ 
    "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]); 
    } 
} 

LoadFile() внутри TinyFile.java:

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(); 
} 

Если у вас есть лучшее решение, такое как способ чтения из файла JSON, пожалуйста, опубликуйте это ниже.

+1

Используйте Джексон и карту непосредственно к POJO ... – fge

+0

'Строка ключ = (String) jsonObject.get ("имя");' я не вижу "имя" ключ в отправил json. Кстати, Джексон является парсером JSON. http://tutorials.jenkov.com/java-json/jackson-jsonparser.html – Truthira

+0

@ThanigaiArasu Извините, я изменил имя при создании этого вопроса. Должность должна отражать это сейчас. –

ответ

1

Наилучший подход заключается в написании JSO класса и разобрать его с помощью Джексона парсер.

Вы можете разобрать Json разными способами. Здесь мы использовали JSON-простой, чтобы парсер JSON

  1. если вы найдете {, то вы должны создать JSONObject
  2. если вы найдете [, а затем создать JSONArray

    JSONParser парсер = новый 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(); 
    } 
    
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; 
} 
Смежные вопросы