[java] Android에서 JSON 배열 (Json 개체 아님)을 구문 분석하는 방법

JSONArray를 구문 분석하는 방법을 찾는 데 문제가 있습니다. 다음과 같이 보입니다.

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

JSON이 다르게 작성된 경우 구문 분석하는 방법을 알고 있습니다 (즉, 객체 배열 대신 json 객체가 반환 된 경우). 그러나 그것은 내가 가진 전부이고 그것과 함께 가야합니다.

* 편집 : 유효한 json입니다. 이 json을 사용하여 iPhone 앱을 만들었습니다. 이제 Android 용으로해야하는데 알아낼 수 없습니다. 많은 예제가 있지만 모두 JSONObject와 관련이 있습니다. JSONArray에 대한 것이 필요합니다.

누군가 나에게 약간의 힌트, 튜토리얼 또는 예제를 줄 수 있습니까?

매우 감사 !



답변

다음 스 니펫을 사용하여 JsonArray를 구문 분석하십시오.

JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}

도움이 되었기를 바랍니다.


답변

난 그냥 좀주지 잭슨 예 :

먼저 JSON 문자열의 필드가있는 데이터 홀더를 만듭니다.

// imports
// ...
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataHolder {
    @JsonProperty("name")
    public String mName;

    @JsonProperty("url")
    public String mUrl;
}

MyDataHolders 목록을 구문 분석합니다.

String jsonString = // your json
ObjectMapper mapper = new ObjectMapper();
List<MyDataHolder> list = mapper.readValue(jsonString,
    new TypeReference<ArrayList<MyDataHolder>>() {});

목록 항목 사용

String firstName = list.get(0).mName;
String secondName = list.get(1).mName;


답변

public static void main(String[] args) throws JSONException {
    String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]";

    JSONArray jsonarray = new JSONArray(str);


    for(int i=0; i<jsonarray.length(); i++){
        JSONObject obj = jsonarray.getJSONObject(i);

        String name = obj.getString("name");
        String url = obj.getString("url");

        System.out.println(name);
        System.out.println(url);
    }
}

산출:

name1
url1
name2
url2


답변

개체를 보관할 클래스를 만듭니다.

public class Person{
   private String name;
   private String url;
   //Get & Set methods for each field
}

그런 다음 다음과 같이 역 직렬화합니다.

Gson gson = new Gson();
Person[] person = gson.fromJson(input, Person[].class); //input is your String

참조 문서 : http://blog.patrickbaumann.com/2011/11/gson-array-deserialization/


답변

@Stebra이 예를 참조하십시오. 이것은 당신을 도울 수 있습니다.

public class CustomerInfo
{
    @SerializedName("customerid")
    public String customerid;
    @SerializedName("picture")
    public String picture;

    @SerializedName("location")
    public String location;

    public CustomerInfo()
    {}
}

그리고 결과를 얻을 때; 이렇게 파싱

List<CustomerInfo> customers = null;
customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());


답변

이 예에서는 하나의 json 배열 내에 여러 객체가 있습니다. 그건,

다음은 json 배열입니다. [{ “name”: “name1”, “url”: “url1”}, { “name”: “name2”, “url”: “url2”}, …]

이것은 하나의 개체입니다. { “name”: “name1”, “url”: “url1”}

jSonResultString이라는 문자열 변수에 대한 결과를 얻었다 고 가정합니다.

JSONArray arr = new JSONArray(jSonResultString);

  //loop through each object
  for (int i=0; i<arr.length(); i++){

  JSONObject jsonProductObject = arr.getJSONObject(i);
  String name = jsonProductObject.getString("name");
  String url = jsonProductObject.getString("url");


}


답변

몇 가지 훌륭한 제안이 이미 언급되었습니다. GSON을 사용하는 것은 정말 편리합니다. 삶을 더 쉽게하기 위해이 웹 사이트를 사용해 볼 수 있습니다.
jsonschema2pojo라고하며 정확히 다음과 같이합니다.

json을 제공하면 프로젝트에 붙여 넣을 수있는 Java 객체가 생성됩니다. GSON을 선택하여 변수에 주석을 달 수 있으므로 json에서 객체를 추출하는 것이 훨씬 쉬워집니다!