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

有没有办法将JSON数组转换为Android的ListView数据绑定正常的Java数组?

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

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

 JSONArray jsonArray = new JSONArray(jsonArrayString); 

然后简单地循环,build立自己的数组。 这段代码假定它是一个string数组,不应该很难修改,以适应您的特定数组结构。

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

也许这只是一个解决方法(效率不是很高),但是你可以这样做:

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

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

不要使用捆绑的org.json库,而应该使用Jackson或GSON,这是一个单线程。 与jackson,f.ex:

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

使用可以使用String[]而不是ArrayList<String>

这将减lessArrayList具有的内存开销

希望它有帮助!

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

我知道这个问题是关于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); } } 

也适用于string数组

这是一个更好的方法:如果你从API获取数据。 然后PARSE的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(); ... 

我们从转换开始[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; } 

接下来创build一个通用版本,用POJOreplacearray.getJSONObject(i ++)

例如:

 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; } 

您可以使用String[]而不是ArrayList<String>

希望它有帮助!

  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; } 

如何使用java.util.Arrays?

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