来自JSONArray(java/android)的键值列表

来自JSONArray(java/android)的键值列表,java,json,Java,Json,我有一个JSON,它是由JSONArray组成的。如何从JSONArray中获取键字符串列表 例如: { "mainKey": [ { "keyValue1": [ { "id": 9000, "name": "John Doe" } ] }, { "keyValue2": [] }, { "keyValue3": []

我有一个JSON,它是由JSONArray组成的。如何从JSONArray中获取键字符串列表

例如:

{
  "mainKey": [
    {
      "keyValue1": [
        {
          "id": 9000, 
          "name": "John Doe"
        }
      ]
    }, 
    {
      "keyValue2": []
    }, 
    {
      "keyValue3": []
    }, 
    {
      "keyValue4": []
    }
  ]
}
我想获得一个带有keyValue1、keyValue2等的ArrayList。我应该如何在Java中执行此操作?

尝试以下操作:

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);
        }
    }
}
JSONObject obj=新的JSONObject(yourJsonString);
JSONArray数组=obj.getJSONArray(“mainKey”);
对于(int n=0;n
我在Android异步任务中执行此操作:

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

@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u fragment\u类,容器,false);
微调器=(微调器)rootView.findViewByID(R.id.spinner);
LoadFromAPI任务=新建LoadFromAPI();
task.execute(url);//本地主机中的有效url
ArrayAdapter=新的ArrayAdapter(rootView.getContext(),
android.R.layout.simple\u微调器\u项目,arrayList);
返回rootView;
}
私有类LoadFromAPI扩展了异步任务{
受保护的void doInBackground(字符串…url){
JSONObject obj=新的JSONObject(您的JSONString);
JSONArray数组=obj.getJSONArray(“mainKey”);
对于(int n=0;n
在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());
    }
}
import org.json.JSONArray;
导入java.util.List;
导入java.util.stream.collector;
导入java.util.stream.IntStream;
公务舱JSONFun{
公共静态列表(JSONArray数组){
返回IntStream.range(0,array.length())
.mapToObj(i->array.getJSONObject(i).keys().next())
.collect(Collectors.toList());
}
}

您尝试过什么吗?尝试org.json库:我尝试过,但是使用arrayList.add(key)而不是println,我得到的是一个空列表。1请注意,这是不安全的。如果数组中包含除至少有一个键的JSONObject以外的任何内容,它将严重失败。我使用的是Java 8,但我无法导入Java.util.stream库!
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());
    }
}