将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())