2012-07-12 259 views

Respuesta

38

Curiosamente, la respuesta es mantener la adición de nuevo la propiedad. Casi esperaba un método setter. : S

System.out.println("Before: " + obj.get("DebugLogId")); // original "02352" 

obj.addProperty("DebugLogId", "YYY"); 

System.out.println("After: " + obj.get("DebugLogId")); // now "YYY" 
+1

Deben he llamado this putProperty. Lo habría dejado más claro. Tampoco dice nada en la documentación que esto reemplaza las propiedades existentes, pero supongo que no sería válido Json en caso contrario. – clu

1

Otro enfoque sería deserializar en un java.util.Map, y luego simplemente modificar el Java Map como se quiera. Esto separa el manejo de datos del lado de Java del mecanismo de transporte de datos (JSON), que es como prefiero organizar mi código: usando JSON para el transporte de datos, no como una estructura de datos de reemplazo.

+0

Gracias, probablemente también la razón por la cual no hay un colocador en primer lugar. –

+0

"eliminar()" - o agregar() nuevamente si está utilizando la versión anterior 2 (no estoy seguro de la versión exacta, pero he visto la diferencia entre las API 1.2.3 y 2.2.4). – orbfish

1

En realidad, todo está en la documentación.
JSONObject y JSONArray se pueden usar para reemplazar la estructura de datos estándar.
Para implementar un colocador simplemente llame a remove(String name) antes de put(String name, Object value).

He aquí un ejemplo simple:

public class BasicDB { 

private JSONObject jData = new JSONObject; 

public BasicDB(String username, String tagline) { 
    try { 
     jData.put("username", username); 
     jData.put("tagline" , tagline); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public String getUsername() { 
    String ret = null; 
    try { 
     ret = jData.getString("username"); 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return ret; 
} 

public void setUsername (String username) { 
    try { 
     jData.remove("username"); 
     jData.put("username" , username); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public String getTagline() { 
    String ret = null; 
    try { 
     ret = jData.getString("tagline"); 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return ret; 
} 
+0

Biblioteca incorrecta. Primero me pregunté de dónde demonios obtuviste un método put(), entonces me di cuenta de que dijiste JSONObject, que es la biblioteca json.org, no JsonObject, la versión GSON. – orbfish

5

Desde 2.3 versión de la biblioteca Gson la clase JSONArray tiene un método 'set'.

He aquí un ejemplo sencillo:

JsonArray array = new JsonArray(); 
array.add(new JsonPrimitive("Red")); 
array.add(new JsonPrimitive("Green")); 
array.add(new JsonPrimitive("Blue")); 

array.remove(2); 
array.set(0, new JsonPrimitive("Yelow")); 
4

Esto funciona para modificar el valor childkey usando JSONObject. importación utilizado es

import org.json.JSONObject; 

ex JSON: (convertir archivos JSON a la cadena mientras que da como entrada)

{ 
    "parentkey1": "name", 
    "parentkey2": { 
    "childkey": "test" 
    }, 
} 

Código

JSONObject jObject = new JSONObject(String jsoninputfileasstring); 
jObject.getJSONObject("parentkey2").put("childkey","data1"); 
System.out.println(jObject); 

de salida:

{ 
    "parentkey1": "name", 
    "parentkey2": { 
    "childkey": "data1" 
    }, 
} 
+0

Use el formato adecuado para que sea claro y fácil de leer. –

+0

solo quería enfatizar que la pregunta es sobre com.google.gson.JsonObject y no org.json.JSONObject. La respuesta seleccionada y más votada, en la parte inferior, parece ser correcta – javaNoober

Cuestiones relacionadas