2010-07-19 5 views
8

Я знаю некоторые JSON-библиотеки, и я сейчас смотрю в Google-JSON, но все, что я хочу достичь, - это что-то простое, и я хочу знать, что вы предложите.Чтение JSON из текстового файла

Я хочу библиотеку JSON, которая позволит мне прочитать текстовый файл, который находится в JSON и позвольте мне преобразовать его в строки, INT, булевы и т.д. - Теперь с помощью 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 
+0

Возможно, открытие нового вопроса для каждой проблемы у вас было в порядке. Вы начали спрашивать одну вещь и в конечном итоге спрашиваете другую. – OscarRyz

ответ

4

Установить 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 

И чтобы получить элемент карты при х = 3 и у = 3:

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

И для получения наименования первых Item:

Легко! Преобразование другого способа также просто с использованием Gson#toJson().

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

См. Также this answer для другого комплекса примера Gson.

+0

Я получаю ошибки, когда следую этому. : \ – nn2

+0

Ошибки сообщают что-то о причине проблемы. Игнорирование ошибок не помогает нам объяснить их. Вы знаете, как только проблема проблемы * понята *, решение является не чем иным, как очевидным. Итак, поделитесь ими с нами :) – BalusC

+0

Это все здесь ... http://www.googlejsonerror.pastebin.com/N5iDazz8 ошибка + источник - что я делаю неправильно? – nn2

3

Я рекомендую эту библиотеку: http://www.json.org/java/

Вы просто должны создать JSONObject из строки, и получить имя proprety.

JSONObject JsonObj = JSONObject(InputStr); 
String MapTitle = JsonObj.getString("title"); 

Скачать источник, и импортировать его в свой проект: http://www.json.org/java/json.zip

+0

Итак, я загружаю JSONObject.java и импортирую его. Тогда я делаю это ...? Никаких примеров или ничего нет.: S – nn2

+0

Да, теперь я застрял. : \ – nn2

+0

Проверьте вопрос наверху. Я его отредактировал :) – nn2

1

весной Framework использует Джексона, так что это довольно хорошее одобрение для Джексона.

JacksonInFiveMinutes

Посмотреть «Простые привязки данных Пример» заголовок, если вы просто хотите использовать общие карты.

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(); 
... 
+0

Я просто попробовал это и эту ошибку: http://www.googlerrror.pastebin.com/8FFvmTCW Я думаю, что мой JSON перепутались. Это я, а не libs ...: \ – nn2

1

Что касается сообщений об ошибках.

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

Обычно вы не называете свой пакет так же, как пакет, который хотите импортировать, хотя вы можете.

Вы должны либо: 1 имя он отличается, 2.- не ставят импорт

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 JSONObject(...

+0

Проверьте вопрос наверху. Я его отредактировал :) – nn2

+0

@ Dan, хорошо, я добавил новый ответ. – OscarRyz

+0

Я добавил новую ошибку/вопрос. – nn2

1

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 }," 

это создает и массив с объектами внутри, первый объект га s атрибуты 1,3,1 и т. д. без значения.

Должно быть:

+ "'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, но ... это не имеет смысла

+0

ОК, я все разобрался. Теперь мне нужно знать, как работает массив массивов, потому что он не работает! – nn2

Смежные вопросы