2015-04-25 3 views
-1

У меня есть JSON, который сделан из JSONArray's. Как получить список ключевых строк из JSONArrays?Список ключевых значений от JSONArray (java/android)

Например:

{ 
    "mainKey": [ 
    { 
     "keyValue1": [ 
     { 
      "id": 9000, 
      "name": "John Doe" 
     } 
     ] 
    }, 
    { 
     "keyValue2": [] 
    }, 
    { 
     "keyValue3": [] 
    }, 
    { 
     "keyValue4": [] 
    } 
    ] 
} 

Я хочу, чтобы получить ArrayList с keyValue1, keyValue2 и так далее. Как мне это сделать на Java?

+1

есть вы что-то пробовали? – nikis

+0

Попробуйте библиотеку org.json: http://www.json.org/java/index.html –

ответ

0

Попробуйте это:

JSONObject obj = new JSONObject(yourJsonString); 
JSONArray array = obj.getJSONArray("mainKey"); 
for(int n = 0; n < array.length(); n++) 
{ 
    JSONObject keyObject = array.getJSONObject(n); 
    Iterator<?> keys = keyObject.keys(); 
    while(keys.hasNext()) { 
     String key = (String)keys.next(); 
     if (obj.get(key) instanceof JSONArray) { 
      System.out.println(key); 
     } 
    } 
} 
+0

Я пробовал это, но с arrayList.add (key) вместо println, и я получаю пустой список. 1 – spine

+0

@coding_brainfart показать мне свой код. –

0

Я делаю это в Android AsyncTask:

ArrayList<String> arrayList = new ArrayList<String>(); 
Spinner spinner; 

...

 @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_fragment_class, container, false); 

spinner = (Spinner) rootView.findViewByID(R.id.spinner); 

LoadFromAPI task = new LoadFromAPI(); 
task.execute(url); // a valid url in a localhost 


     ArrayAdapter<String> adapter = new ArrayAdapter<String>(rootView.getContext(), 
       android.R.layout.simple_spinner_item, arrayList); 
return rootView; 
} 
    private class LoadFromAPI extends AsyncTask<String, Void, Void> { 

    protected void doInBackground (String... url) { 
     JSONObject obj = new JSONObject(yourJsonString); 
     JSONArray array = obj.getJSONArray("mainKey"); 
     for(int n = 0; n < array.length(); n++) 
     { 
      JSONObject keyObject = array.getJSONObject(n); 
      Iterator<?> keys = keyObject.keys(); 
      while(keys.hasNext()) { 
       String key = (String)keys.next(); 
       if (obj.get(key) instanceof JSONArray) { 
        arrayList.add(key); 
       } 
      } 
     } 
    } 
0

В Java 8:

import org.json.JSONArray; 
import java.util.List; 
import java.util.stream.Collectors; 
import java.util.stream.IntStream; 

public class JSONFun { 

    public static List<String> firstKeysOf(JSONArray array) { 
     return IntStream.range(0, array.length()) 
       .mapToObj(i -> array.getJSONObject(i).keys().next()) 
       .collect(Collectors.toList()); 
    } 
} 
+0

Обратите внимание, что это не безопасно. Он будет терпеть неудачу, если массив содержит что-либо кроме JSONObject с хотя бы одним ключом. – Daniel

+0

Я использую Java 8, но я не могу импортировать библиотеки java.util.stream! – spine

Смежные вопросы