Я знаю о некотором JSON, освобождает вокруг, и я в настоящее время изучаю Google-JSON, но все, чего я хочу достигнуть, является чем-то простым, и я хочу знать то, что Вы предложили бы.
Я хочу библиотеку JSON, которая позволит мне прочитать текстовый файл, который находится в JSON, и позвольте мне преобразовать его в строки, интервал, булевскую переменную, и т.д. - теперь использование Json.org/java
Это может ЧИТАТЬ! НО!!
import org.json.*;
public class readJ {
public static String MapTitle;
public static int[][] tiles;
public static void main(String[] args) {
String json =
"{"
+"'name': 'map_one.txt',"
+"'title': 'Map One',"
+"'currentMap': 4,"
+"'items': ["
+"{ name: 'Pickaxe', x: 5, y: 1 },"
+"{ name: 'Battleaxe', x: 2, y: 3 }"
+"],"
+"map': [ [ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],"
+"[ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],"
+"[ 1,7,1,1,1,24,1,1,24,1,1,1,1 ],"
+"[ 1,7,1,1,7,1,1,1,24,1,1,1,1 ],"
+"[ 1,7,7,7,1,24,24,24,24,1,1,1,1 ],"
+"[ 1,1,7,1,1,24,1,24,1,1,1,1,1 ],"
+"[ 1,1,1,1,1,24,1,1,1,1,1,1,1 ],"
+"[ 1,1,3,1,1,24,1,1,1,1,1,1,1 ],"
+"[ 1,3,3,1,1,24,1,1,1,1,1,1,1 ]]"
+"}";
try {
JSONObject JsonObj = new JSONObject(json);
MapTitle = JsonObj.getString("title");
tiles = JsonObj.getJSONArray("map");
}catch (JSONException er) {
er.printStackTrace();
}
System.out.println(MapTitle);
System.out.println(tiles[0][1]);
}
}
При компиляции я получаю эту ошибку:
C:\Users\Dan\Documents\readJSON\readJ.java:32: incompatible types
found : org.json.JSONArray
required: int[][]
tiles = JsonObj.getJSONArray("map");
^
1 error
Tool completed with exit code 1
Установите Google Gson и создайте эти два класса модели
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; }
}
и
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; }
}
и преобразуйте свой JSON следующим образом:
Data data = new Gson().fromJson(json, Data.class);
Чтобы получить заголовок, просто выполните:
System.out.println(data.getTitle()); // Map One
И получить элемент карты с координатами x = 3 и y = 3:
System.out.println(data.getMap()[3][3]); // 1
И получить имя первого элемента
:
System.out.println(data.getItems().get(0).getName()); // Pickaxe
Легко! Преобразование в другую сторону также просто с помощью Gson # toJson ()
.
String json = new Gson().toJson(data);
См. Также этот ответ для другого сложного примера Gson.
Я рекомендую эту библиотеку: http://www.json.org/java/
Вам просто нужно создать JSONObject из строки, и получить свойство имени.
JSONObject JsonObj = JSONObject( InputStr );
String MapTitle = JsonObj.getString("title");
Скачайте исходник и импортируйте его в свой проект: http://www.json.org/java/json.zip
Что касается сообщений об ошибках.
C:\Users\Dan\Documents\readJSON\readJ.java:2: cannot find symbol
symbol : class json
location: package org
import org.json;
^
Обычно вы не называете свой пакет так же, как пакет, который вы хотите импортировать, хотя вы можете.
Вы должны либо: 1 назвать его по-другому, 2.- не ставить 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);
Вам не хватает "new" там... это должно быть new JSONObject(...
org.json.JSONException: Expected a ':' after a key at 148 [character 149 line 1]
Здесь ваша строка json недействительна:
+ "'map': [ { 1,3,1,1,1,24,1,1,1,1,1,1,1 },"
Это создает массив с объектами внутри, первый объект имеет атрибуты 1,3,1
etc без значения.
Должно быть:
+ "'map': [ [ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],"
Чтобы это был массив с массивами внутри.
Или
+ "'map': [ { 1:0,3:0,1:0,1:...
Так что вы можете иметь атрибуты 1,3,1 и т.д. со значением 0, но... это не имеет смысла
Вы можете сделать это с помощью google-gson. Думаю, это будет выглядеть примерно так:
JsonParser parser = new JsonParser();
JsonObject object = parser.parse(text).getAsJsonObject();
String title = object.get("title").getAsString();
int currentMap = object.get("currentMap").getAsInt();
...
json-lib поставляется с примером преобразования строки в объект JSON:
http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JSON_formatted_string
The Spring Framework использует Джексона, так что это довольно хорошее одобрение для Джексона.
См. заголовок "Пример простой привязки данных", если вы просто хотите использовать универсальные карты.