将 Json 数组转换为普通的 Java 列表

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3395729/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 22:55:18  来源:igfitidea点击:

Convert Json Array to normal Java list

javaandroidjson

提问by Houston we have a problem

Is there a way to convert JSON Array to normal Java Array for android ListView data binding?

有没有办法将 JSON 数组转换为普通的 Java 数组,用于 android ListView 数据绑定?

采纳答案by Pentium10

ArrayList<String> list = new ArrayList<String>();     
JSONArray jsonArray = (JSONArray)jsonObject; 
if (jsonArray != null) { 
   int len = jsonArray.length();
   for (int i=0;i<len;i++){ 
    list.add(jsonArray.get(i).toString());
   } 
} 

回答by Nick

If you don't already have a JSONArray object, call

如果您还没有 JSONArray 对象,请调用

JSONArray jsonArray = new JSONArray(jsonArrayString);

Then simply loop through that, building your own array. This code assumes it's an array of strings, it shouldn't be hard to modify to suit your particular array structure.

然后简单地循环遍历,构建自己的数组。此代码假定它是一个字符串数组,修改以适合您的特定数组结构应该不难。

List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
    list.add( jsonArray.getString(i) );
}

回答by Michal Tsadok

How about using java.util.Arrays?

使用 java.util.Arrays 怎么样?

List<String> list = Arrays.asList((String[])jsonArray.toArray())

回答by Guido Sabatini

Maybe it's only a workaround (not very efficient) but you could do something like this:

也许这只是一种解决方法(效率不高),但您可以执行以下操作:

String[] resultingArray = yourJSONarray.join(",").split(",");

String[] resultingArray = yourJSONarray.join(",").split(",");

Obviously you can change the ',' separator with anything you like (I had a JSONArrayof email addresses)

显然你可以,用你喜欢的任何东西来改变 ' ' 分隔符(我有一个JSONArray电子邮件地址)

回答by pchot

I know that question is about JSONArray but here's example I've found useful where you don't need to use JSONArray to extract objects from JSONObject.

我知道这个问题是关于 JSONArray 的,但我发现这里的示例很有用,您不需要使用 JSONArray 从 JSONObject 中提取对象。

import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

String jsonStr = "{\"types\":[1, 2]}";
JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
List<Long> list = (List<Long>) json.get("types");
if (list != null) {
    for (Long s : list) {
        System.out.println(s);
    }
}

Works also with array of strings

也适用于字符串数组

回答by Joolah

Here is a better way of doing it: if you are getting the data from API. Then PARSE the JSON and loading it onto your listview:

这是一个更好的方法:如果您从 API 获取数据。然后解析 JSON 并将其加载到您的列表视图中:

protected void onPostExecute(String result) {
                Log.v(TAG + " result);


                if (!result.equals("")) {

                    // Set up variables for API Call
                    ArrayList<String> list = new ArrayList<String>();

                    try {
                        JSONArray jsonArray = new JSONArray(result);

                        for (int i = 0; i < jsonArray.length(); i++) {

                            list.add(jsonArray.get(i).toString());

                        }//end for
                    } catch (JSONException e) {
                        Log.e(TAG, "onPostExecute > Try > JSONException => " + e);
                        e.printStackTrace();
                    }


                    adapter = new ArrayAdapter<String>(ListViewData.this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
                    listView.setAdapter(adapter);
                    listView.setOnItemClickListener(new OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                            // ListView Clicked item index
                            int itemPosition = position;

                            // ListView Clicked item value
                            String itemValue = (String) listView.getItemAtPosition(position);

                            // Show Alert
                            Toast.makeText( ListViewData.this, "Position :" + itemPosition + "  ListItem : " + itemValue, Toast.LENGTH_LONG).show();
                        }
                    });

                    adapter.notifyDataSetChanged();


                        adapter.notifyDataSetChanged();

...

回答by StaxMan

Instead of using bundled-in org.jsonlibrary, try using Hymanson or GSON, where this is a one-liner. With Hymanson, f.ex:

不要使用捆绑org.json库,而是尝试使用 Hymanson 或 GS​​ON,这是单行的。与Hyman逊,f.ex:

List<String> list = new ObjectMapper().readValue(json, List.class);
// Or for array:
String[] array = mapper.readValue(json, String[].class);

回答by detman

Use can use a String[]instead of an ArrayList<String>:

使用可以使用 aString[]代替 an ArrayList<String>

It will reduce the memory overhead that an ArrayList has

它将减少 ArrayList 的内存开销

Hope it helps!

希望能帮助到你!

String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
    parametersArray[i] = parametersJSONArray.getString(i);
}

回答by ceph3us

we starting from conversion [ JSONArray -> List < JSONObject > ]

我们从转换开始 [ JSONArray -> List < JSONObject > ]

public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array) 
        throws JSONException {
  ArrayList<JSONObject> jsonObjects = new ArrayList<>();
  for (int i = 0; 
           i < (array != null ? array.length() : 0);           
           jsonObjects.add(array.getJSONObject(i++)) 
       );
  return jsonObjects;
}

next create generic version replacing array.getJSONObject(i++) with POJO

接下来创建通用版本用 POJO 替换 array.getJSONObject(i++)

example :

例子 :

public <T> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array) 
        throws JSONException {
  ArrayList<Tt> tObjects = new ArrayList<>();
  for (int i = 0; 
           i < (array != null ? array.length() : 0);           
           tObjects.add( (T) createT(forClass, array.getJSONObject(i++))) 
       );
  return tObjects;
}

private static T createT(Class<T> forCLass, JSONObject jObject) {
   // instantiate via reflection / use constructor or whatsoever 
   T tObject = forClass.newInstance(); 
   // if not using constuctor args  fill up 
   // 
   // return new pojo filled object 
   return tObject;
}

回答by Iman Marashi

You can use a String[]instead of an ArrayList<String>:

您可以使用 aString[]代替 an ArrayList<String>

Hope it helps!

希望能帮助到你!

   private String[] getStringArray(JSONArray jsonArray) throws JSONException {
            if (jsonArray != null) {
                String[] stringsArray = new String[jsonArray.length()];
                for (int i = 0; i < jsonArray.length(); i++) {
                    stringsArray[i] = jsonArray.getString(i);
                }
                return stringsArray;
            } else
                return null;
        }