developer tip

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

copycodes 2020. 10. 9. 11:21
반응형

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/


이 예제에는 하나의 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");


}

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

A few great suggestions are already mentioned. Using GSON is really handy indeed, and to make life even easier you can try this website It's called jsonschema2pojo and does exactly that:

You give it your json and it generates a java object that can paste in your project. You can select GSON to annotate your variables, so extracting the object from your json gets even easier!


My case Load From Server Example..

int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages"));
            if (jsonLength != 1) {
                for (int i = 0; i < jsonLength; i++) {
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("messages"));
                    JSONObject resJson = (JSONObject) jsonArray.get(i);
                    //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at"));
                }

Hope it help


Create a POJO Java Class for the objects in the list like so:

class NameUrlClass{
       private String name;
       private String url;
       //Constructor
       public NameUrlClass(String name,String url){
              this.name = name;
              this.url = url; 
        }
}

Now simply create a List of NameUrlClass and initialize it to an ArrayList like so:

List<NameUrlClass> obj = new ArrayList<NameUrlClass>;

You can use store the JSON array in this object

obj = JSONArray;//[{"name":"name1","url":"url1"}{"name":"name2","url":"url2"},...]

            URL url = new URL("your URL");
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();
            BufferedReader reader;
            reader = new BufferedReader(new InputStreamReader(stream));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            //setting the json string
            String finalJson = buffer.toString();

            //this is your string get the pattern from buffer.
            JSONArray jsonarray = new JSONArray(finalJson);

Old post I know, but unless I've misunderstood the question, this should do the trick:

s = '[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"}]';
eval("array=" + s);
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
    alert(array[i][index]);
}

}

참고URL : https://stackoverflow.com/questions/18977144/how-to-parse-json-array-not-json-object-in-android

반응형