2010-07-19 15 views
8

Conozco algunas librerías JSON y actualmente estoy buscando en Google-JSON, pero todo lo que quiero lograr es algo simple y quiero saber qué sugeriría.Leyendo JSON desde un archivo de texto

Quiero una biblioteca JSON que dejarme leer un archivo de texto que se encuentra en JSON y que me convierto en cadenas, int, boolean, etc. - Ahora utilizando Json.org/java

Se puede ¡LEER! ¡¡PERO!!

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]); 

    } 
} 

Al compilar me sale este error:

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

Probablemente abriendo una nueva pregunta para cada problema que tenía estaba en orden. Comenzaste a preguntar una cosa y terminaste preguntando otra. – OscarRyz

Respuesta

4

Instalar Google Gson y crear esas dos clases del modelo

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

y

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

y convertir sus JSON de la siguiente manera:

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

Para obtener el título acaba de hacer:

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

Y para obtener el elemento del mapa en x = 3 ey = 3:

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

Y para obtener el nombre de la primera Item:

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

¡Fácil! Convertir al otro lado también es simple usando Gson#toJson().

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

Véase también this answer para otro ejemplo complejo de Gson.

+0

Recibo errores cuando sigo esto. : \ – nn2

+0

Los errores indican algo sobre la causa del problema. Ignorar errores no nos ayuda a ayudarte a explicarlos. Ya sabes, una vez que se entiende * la causa del problema *, la solución no es más que obvia. Entonces, compártelos con nosotros :) – BalusC

+0

Todo está aquí ... http://www.googlejsonerror.pastebin.com/N5iDazz8 error + fuente - ¿Qué estoy haciendo mal? – nn2

3

recomiendo esta biblioteca: http://www.json.org/java/

Usted simplemente tiene que crear un JSONObject de cuerda, y obtener el nombre PROPRETY.

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

descargar el código fuente, y la importación en su proyecto: http://www.json.org/java/json.zip

+0

Así que descargo JSONObject.java e lo importo. Entonces hago eso ...? No hay ejemplos o nada sheesh.: S – nn2

+0

Sí, ahora estoy atascado. : \ – nn2

+0

Verifique la pregunta en la parte superior. Lo edité :) – nn2

1

La Primavera Framework utiliza a Jackson, por lo que es un respaldo bastante bueno para Jackson.

JacksonInFiveMinutes

Consulte los "datos simples Encuadernación Ejemplo" la partida si sólo desea utilizar mapas genéricos.

0

Puede hacerlo bien con google-gson. Creo que se vería algo como esto:

JsonParser parser = new JsonParser(); 
JsonObject object = parser.parse(text).getAsJsonObject(); 

String title = object.get("title").getAsString(); 
int currentMap = object.get("currentMap").getAsInt(); 
... 
+0

Acabo de intentarlo y este error: http://www.googlerrror.pastebin.com/8FFvmTCW Creo que mi JSON es hecho un desastre. Soy yo, no las libs ...: \ – nn2

1

En cuanto a los mensajes de error.

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

No suele nombrar su paquete de la misma forma que el paquete que desea importar, aunque puede hacerlo.

Tienes que sea: 1 Nombre diferente, 2.- no ponga la importación

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

Te falta una "nueva" no ... debe ser new JSONObject(...

+0

Verifique la pregunta en la parte superior. Lo edité :) – nn2

+0

@Dan, vale, agregué una nueva respuesta. – OscarRyz

+0

Agregué un nuevo error/pregunta. – nn2

1

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

Aquí, su cadena JSON no es válido:

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

que crea y matriz con objetos en el interior, el primer objeto de hectáreas s los atributos 1,3,1 etc. sin valor.

debe ser:

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

Para que esto sea una matriz con arrays interior.

O

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

lo que puede tener atributos 1,3,1 etc con valor 0, pero ... eso no tiene sentido

+0

OK, lo tengo todo resuelto. ¡Ahora necesito saber cómo funciona la matriz de mapas porque me está saliendo! – nn2

Cuestiones relacionadas