是否有办法将JSON数组转换为普通的Java数组,用于android ListView数据绑定?
将Json数组转换为普通的Java列表
org.JSONArray
在引擎盖下使用了一个ArrayList...替换代码1】,所以大多数循环在很多情况下都是白做的(只是为了封装)。

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());
Matt K
:
for 循环缺少结尾的小括号......试着编辑,但没有足够的字符来通过审批。 哦,好吧!只是一个参考。
实际上并没有遗漏,回答者只是粘贴了一大块代码,其中有函数的开括号和闭括号。
dbm
:
如果
jsonArray.get(i)
返回null(作为解析这个的结果:
[ "String 1", null, "String 2" ]
)会发生什么?那你的for-loop不会崩溃吗?
谢谢。如果一个人有sring,那么JSONArray可以被创建为JSONArray jsonArray = new JSONArray (yourString); 其余的代码将保持不变。
根据不同的实现,你可能需要
size()
而不是
length()
。
Nick
发布于
2011-10-04
0
人赞同
如果你还没有一个JSONArray对象,请调用
JSONArray jsonArray = new JSONArray(jsonArrayString);
然后简单地循环浏览,建立你自己的数组。这段代码假设它是一个字符串数组,应该不难修改以适应你的特定数组结构。
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
Nick
:
对不起,你是对的--我把Lists和JSONArrays混淆了:)它确实是JSONArray.length()。
StaxMan
发布于
2011-10-04
0
人赞同
与其使用捆绑的
org.json
库,不如尝试使用Jackson或GSON,这只是一个单行代码。使用Jackson,例如。
List<String> list = new ObjectMapper().readValue(json, List.class);
// Or for array:
String[] array = mapper.readValue(json, String[].class);
Guido Sabatini
发布于
2011-10-04
0
人赞同
也许这只是一个变通办法(效率不高),但你可以这样做。
String[] resultingArray = yourJSONarray.join(",").split(",");
显然,你可以用任何你喜欢的东西来改变"
,
"的分隔符(我有一个
JSONArray
的电子邮件地址)。
Artemix
:
请注意,你必须绝对确定数据不包含你的分隔符,否则你会得到损坏的数据。
而结果必须是一个字符串。
Samuel Philipp
发布于
2011-10-04
0
人赞同
使用Java Streams,你可以只用一个
IntStream
来映射对象。
JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
.mapToObj(array::get)
.map(Object::toString)
.collect(Collectors.toList());
nurnachman
发布于
2011-10-04
0
人赞同
使用可以用
String[]
代替
ArrayList<String>
。
它将减少ArrayList的内存开销。
Hope it helps!
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
parametersArray[i] = parametersJSONArray.getString(i);
pchot
发布于
2011-10-04
0
人赞同
我知道这个问题是关于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);
也适用于字符串数组
Thiago
发布于
2011-10-04
0
人赞同
这里有一个更好的方法:如果你从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();
ceph3us
发布于
2011-10-04
0
人赞同
we starting from conversion [ 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;
接下来创建通用版本,用POJO代替array.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;
Iman Marashi
发布于
2011-10-04
0
人赞同
你可以用
String[]
来代替
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;
Mayank Yadav
发布于
2011-10-04
0
人赞同
我们可以简单地将JSON转换为可读字符串,并使用String类的 "split "方法将其分割。
String jsonAsString = yourJsonArray.toString();
//we need to remove the leading and the ending quotes and square brackets
jsonAsString = jsonAsString.substring(2, jsonAsString.length() -2);
//split wherever the String contains ","
String[] jsonAsStringArray = jsonAsString.split("\",\"");
StackOverflow
发布于
2011-10-04
0
人赞同
To improve Pentium10s Post:
我只是把JSON数组中的元素用foreach循环放入列表中。这样,代码就更清晰了。
ArrayList<String> list = new ArrayList<String>();
JSONArray jsonArray = (JSONArray)jsonObject;
jsonArray.forEach(element -> list.add(element.toString());
user10878560
发布于
2011-10-04
0
人赞同
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;
user1659299
发布于
2011-10-04
0
人赞同
你可以使用迭代器。
JSONArray exportList = (JSONArray)response.get("exports");
Iterator i = exportList.iterator();
while (i.hasNext()) {
JSONObject export = (JSONObject) i.next();
String name = (String)export.get("name");
Johannes Barop
发布于
2011-10-04
0
人赞同
我知道这个问题是针对
Java
的。但我想分享一个关于
Kotlin
的可能解决方案,因为我认为它很有用。
使用Kotlin,你可以编写一个扩展函数,将
JSONArray
转换为一个本地(Kotlin)数组。
fun JSONArray.asArray(): Array<Any> {
return Array(this.length()) { this[it] }
现在你可以直接在一个JSONArray
实例上调用asArray()
。