2012-07-12 8 views
16

JSON String을 GSON에서 제공하는 JsonObject 클래스로 파싱했으면 (의미있는 데이터 객체로 파싱하지 않고 엄격하게 JsonObject를 사용하고 싶다고 가정), 필드/값을 어떻게 수정할 수 있습니까? 키의 직접?JsonObject/JsonArray의 값을 직접 수정하는 방법은 무엇입니까?

나를 도울 API가 보이지 않습니다.

https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonObject.html

답변

38

이상하게도, 대답은 다시 속성을 계속 추가하는 것입니다. 나는 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

그들은해야 이 putProperty를 호출했습니다. 더 명확하게했을까요? 또한이 설명서에서 기존 속성을 대체한다는 내용은 없지만 Json이 아닌 경우에는 유효하지 않습니다. – clu

1

또 다른 방법은 java.util.Map로 역 직렬화 할 수 있으며, 원하는대로 후 바로 자바 Map을 수정합니다. 이는 데이터 전송 메커니즘 (JSON)에서 Java 측 데이터 처리를 분리합니다. 이는 코드를 구성하는 방법 인 JSON을 대체 데이터 구조로 사용하지 않고 데이터 전송에 사용합니다.

+0

처음에는 세터가없는 이유도 있습니다. –

+0

이전 버전 2 (정확한 버전은 모르지만 1.2.3과 2.2.4 API의 차이점을 확인)를 사용하는 경우 'remove()'또는 add()를 다시 수행하십시오. – orbfish

1

실제로 모든 문서에 나와 있습니다.
JSONObject 및 JSONArray를 사용하여 표준 데이터 구조를 대체 할 수 있습니다.
세터를 구현하려면 앞에 remove(String name)을 호출하기 만하면됩니다.

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

잘못된 라이브러리입니다. 먼저 put() 메소드가있는 곳을 궁금해했다. 그런 다음 JSONObject (json.org 라이브러리가 아니라 JsonObject, GSON 버전)라고 말한 것을 깨달았다. – orbfish

5

GSON 라이브러리의 버전 2.3 이후 JsonArray 클래스는 '설정'방법이 있습니다

는 여기에 간단한 예입니다.

는 여기에 간단한 예제 :

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

JSONObject를 사용하여 childkey 값을 수정하기위한 작동합니다. 사용 가져 오기

import org.json.JSONObject; 

전직 JSON입니다 : (입력으로 제공하면서 문자열로 JSON 파일을 변환)

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

코드

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

출력 :

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

읽기 쉽도록 명확한 서식을 사용하십시오. –

+0

그냥 com.google.gson.JsonObject가 아니라 org.json.JSONObject에 대한 질문을 강조하고 싶습니다. 하단에서 가장 많이 선택하고 대답하는 대답이 올바른 것으로 보입니다. – javaNoober

관련 문제