Android 将JSONarray转换为ArrayList
我正在下载一个JSON字符串并将其转换为JSONArray。我把它放到一个listview中,以后需要能够从该listview中删除,而且由于JSONArray没有.remove方法(感谢Obama),我正在尝试将它转换为arraylist 这是我的JSON(array.toString()): 我需要将它放入一个数组中,并能够通过它们各自的键调用字符串。谢谢你的帮助Android 将JSONarray转换为ArrayList,android,android-listview,Android,Android Listview,我正在下载一个JSON字符串并将其转换为JSONArray。我把它放到一个listview中,以后需要能够从该listview中删除,而且由于JSONArray没有.remove方法(感谢Obama),我正在尝试将它转换为arraylist 这是我的JSON(array.toString()): 我需要将它放入一个数组中,并能够通过它们各自的键调用字符串。谢谢你的帮助 ArrayList listdata=new ArrayList(); ArrayList<String> list
ArrayList listdata=new ArrayList();
ArrayList<String> listdata = new ArrayList<String>();
JSONArray jArray = (JSONArray)jsonObject;
if (jArray != null) {
for (int i=0;i<jArray.length();i++){
listdata.add(jArray.getString(i));
}
}
JSONArray jArray=(JSONArray)jsonObject;
如果(jArray!=null){
对于(inti=0;i请尝试这种方法
这段代码假设它是一个字符串数组,修改它以适应您特定的数组结构应该不难
JSONArray jsonArray = new JSONArray(jsonArrayString);
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
JSONArray-JSONArray=新的JSONArray(jsonArrayString);
列表=新的ArrayList();
对于(int i=0;i,您不需要将JSON字符串转换为ArrayList甚至映射,而只需创建一个自身
要从格式正确的JSON字符串创建JSONObject
,只需调用
为了方便起见,请使用POJO
像这样试试
List<YourPojoObject> yourPojos = new ArrayList<YourPojoObject>();
JSONObject jsonObject = new JSONObject(jsonString);
YourPojoObject yourPojo = new YourPojoObject();
yourPojo.setId(jsonObject.getString("idName"));
...
...
yourPojos.add(yourPojo);
List yourPojos=newarraylist();
JSONObject JSONObject=新的JSONObject(jsonString);
YourPojoObject yourPojo=newyourpojoobject();
yourPojo.setId(jsonObject.getString(“idName”);
...
...
添加(yourPojo);
JSONArray数组=新的JSONArray(json);
列表=新的ArrayList();
对于(inti=0;i
我已经用了
将以下行添加到模块的build.gradle
:
依赖项{
// ...
//请注意,“compile”将被弃用。请改用“implementation”。
//看https://stackoverflow.com/a/44409111 更多信息
实现'com.google.code.gson:gson:2.8.2'
}
JSON
字符串:
private String jsonString = "[\n" +
" {\n" +
" \"id\": \"c200\",\n" +
" \"name\": \"Ravi Tamada\",\n" +
" \"email\": \"ravi@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c201\",\n" +
" \"name\": \"Johnny Depp\",\n" +
" \"email\": \"johnny_depp@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c202\",\n" +
" \"name\": \"Leonardo Dicaprio\",\n" +
" \"email\": \"leonardo_dicaprio@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c203\",\n" +
" \"name\": \"John Wayne\",\n" +
" \"email\": \"john_wayne@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c204\",\n" +
" \"name\": \"Angelina Jolie\",\n" +
" \"email\": \"angelina_jolie@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"female\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c205\",\n" +
" \"name\": \"Dido\",\n" +
" \"email\": \"dido@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"female\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c206\",\n" +
" \"name\": \"Adele\",\n" +
" \"email\": \"adele@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"female\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c207\",\n" +
" \"name\": \"Hugh Jackman\",\n" +
" \"email\": \"hugh_jackman@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c208\",\n" +
" \"name\": \"Will Smith\",\n" +
" \"email\": \"will_smith@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c209\",\n" +
" \"name\": \"Clint Eastwood\",\n" +
" \"email\": \"clint_eastwood@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c2010\",\n" +
" \"name\": \"Barack Obama\",\n" +
" \"email\": \"barack_obama@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c2011\",\n" +
" \"name\": \"Kate Winslet\",\n" +
" \"email\": \"kate_winslet@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"female\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"id\": \"c2012\",\n" +
" \"name\": \"Eminem\",\n" +
" \"email\": \"eminem@gmail.com\",\n" +
" \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
" \"gender\" : \"male\",\n" +
" \"phone\": {\n" +
" \"mobile\": \"+91 0000000000\",\n" +
" \"home\": \"00 000000\",\n" +
" \"office\": \"00 000000\"\n" +
" }\n" +
" }\n" +
" ]";
ContactModel.java
:
public class ContactModel {
public String id;
public String name;
public String email;
}
将JSON字符串转换为ArrayList
的代码:
注意:您必须导入java.lang.reflect.Type;
:
// Top of file
import java.lang.reflect.Type;
// ...
private void parseJSON() {
Gson gson = new Gson();
Type type = new TypeToken<List<ContactModel>>(){}.getType();
List<ContactModel> contactList = gson.fromJson(jsonString, type);
for (ContactModel contact : contactList){
Log.i("Contact Details", contact.id + "-" + contact.name + "-" + contact.email);
}
}
//文件顶部
导入java.lang.reflect.Type;
// ...
私有void parseJSON(){
Gson Gson=新的Gson();
Type Type=new-TypeToken(){}.getType();
List contactList=gson.fromJson(jsonString,type);
用于(联系人型号联系人:联系人列表){
Log.i(“联系人详细信息”,Contact.id+“-”+Contact.name+“-”+Contact.email);
}
}
希望这能对您有所帮助。公共静态列表getJSONObjectListFromJSONArray(JSONArray数组)
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;
}
抛出JSONException{
ArrayList jsonObjects=新的ArrayList();
对于(int i=0;
i<(数组!=null?数组.长度():0);
添加(array.getJSONObject(i++)
);
返回JSONObject;
}
我有一个快速解决方案。只需创建一个文件ArrayUtil.java
import java.util.ArrayList;
import java.util.Collection;
import org.json.JSONArray;
import org.json.JSONException;
public class ArrayUtil
{
public static ArrayList<Object> convert(JSONArray jArr)
{
ArrayList<Object> list = new ArrayList<Object>();
try {
for (int i=0, l=jArr.length(); i<l; i++){
list.add(jArr.get(i));
}
} catch (JSONException e) {}
return list;
}
public static JSONArray convert(Collection<Object> list)
{
return new JSONArray(list);
}
}
ObjectMapper mapper = new ObjectMapper();
List<Student> list = Arrays.asList(mapper.readValue(jsonString, Student[].class));
在Java 8中
IntStream.range(0,jsonArray.length()).mapToObj(i->jsonArray.getString(i)).collect(Collectors.toList())
我有一个快速的解决方案。只需创建一个文件ArrayUtil.java
import java.util.ArrayList;
import java.util.Collection;
import org.json.JSONArray;
import org.json.JSONException;
public class ArrayUtil
{
public static ArrayList<Object> convert(JSONArray jArr)
{
ArrayList<Object> list = new ArrayList<Object>();
try {
for (int i=0, l=jArr.length(); i<l; i++){
list.add(jArr.get(i));
}
} catch (JSONException e) {}
return list;
}
public static JSONArray convert(Collection<Object> list)
{
return new JSONArray(list);
}
}
ObjectMapper mapper = new ObjectMapper();
List<Student> list = Arrays.asList(mapper.readValue(jsonString, Student[].class));
一般变体
public static <T> List<T> getList(JSONArray jsonArray) throws Exception {
List<T> list = new ArrayList<>(jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
list.add((T)jsonArray.get(i));
}
return list;
}
//Usage
List<String> listKeyString = getList(dataJsonObject.getJSONArray("keyString"));
publicstaticlist getList(JSONArray-JSONArray)引发异常{
List List=newarraylist(jsonArray.length());
for(int i=0;i
使用Gson
List<Student> students = new ArrayList<>();
JSONArray jsonArray = new JSONArray(stringJsonContainArray);
for (int i = 0; i < jsonArray.length(); i++) {
Student student = new Gson().fromJson(jsonArray.get(i).toString(), Student.class);
students.add(student);
}
return students;
List students=new ArrayList();
JSONArray JSONArray=新的JSONArray(stringJsonContainArray);
for(int i=0;i
如果您想从JSON字符串数组中提取数据,这是我的工作代码。请将参数更改为您的数据
波乔班
使用下面的代码行提取数据
试试看{
JSONArray jsonArr=新的JSONArray(“您的json字符串数组”);
List lstextextdata=newarraylist();
for(int i=0;i
它将返回PoJo类对象的列表。ArrayList listdata=new ArrayList();
ArrayList<String> listdata = new ArrayList<String>();
JSONArray jArray = (JSONArray)jsonObject;
if (jArray != null) {
listdata.addAll(jArray);
}
JSONArray jArray=(JSONArray)jsonObject;
如果(jArray!=null){
addAll(jArray);
}
@简化的仅根据主题的原始主题:
将jsonarray转换为列表(此处使用jackson jsonarray和对象映射器):
ObjectMapper mapper=new ObjectMapper();
JSONArray数组=新的JSONArray();
数组。put(“IND”);
数组.put(“CHN”);
List List=mapper.readValue(array.toString(),List.class);
Java8风格
JSONArray data = jsonObject.getJSONArray("some-node");
List<JSONObject> list = StreamSupport.stream(data.spliterator(), false)
.map(e -> (JSONObject)e)
.collect(Collectors.toList());
JSONArray data=jsonObject.getJSONArray(“某个节点”);
List List=StreamSupport.stream(data.spliterator(),false)
.map(e->(JSONObject)e)
.collect(Collectors.toList());
更简单的Java 8替代方案:
JSONArray data = new JSONArray(); //create data from this -> [{"thumb_url":"tb-1370913834.jpg","event_id":...}]
List<JSONObject> list = data.stream().map(o -> (JSONObject) o).collect(Collectors.toList());
JSONArray data=new JSONArray();//从此创建数据->[{“thumb_url”:“tb-1370913834.jpg”,“event_id”:…}]
List List=data.stream().map(o->(JSONObject)o).collect(collector.toList());
使用Kotlin,您可以通过使用可变列表包装JSONArray来避免循环,例如
val artistMetadata=player.metadata.optJSONArray(“艺术家”)
val artists=MutableList(artistMetadata.length()){i->artistMetadata.getString(i)}
公共静态列表转换器JSONARRAYTOSTRINGLIST(JsonArray ja){
列表结果=新建ArrayList();
public static <T> List<T> getList(JSONArray jsonArray) throws Exception {
List<T> list = new ArrayList<>(jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
list.add((T)jsonArray.get(i));
}
return list;
}
//Usage
List<String> listKeyString = getList(dataJsonObject.getJSONArray("keyString"));
List<Student> students = new ArrayList<>();
JSONArray jsonArray = new JSONArray(stringJsonContainArray);
for (int i = 0; i < jsonArray.length(); i++) {
Student student = new Gson().fromJson(jsonArray.get(i).toString(), Student.class);
students.add(student);
}
return students;
public class AllAppModel {
private String appName;
private String packageName;
private int uid;
private boolean isSelected;
private boolean isSystemApp;
private boolean isFav;
}
try {
JSONArray jsonArr = new JSONArray("Your json string array");
List<AllAppModel> lstExtrextData = new ArrayList<>();
for (int i = 0; i < jsonArr.length(); i++) {
JSONObject jsonObj = jsonArr.getJSONObject(i);
AllAppModel data = new AllAppModel();
data.setAppName(jsonObj.getString("appName"));
data.setPackageName(jsonObj.getString("packageName"));
data.setUid(jsonObj.getInt("uid"));
data.setSelected(jsonObj.getBoolean("isSelected"));
data.setSystemApp(jsonObj.getBoolean("isSystemApp"));
data.setFav(jsonObj.getBoolean("isFav"));
lstExtrextData.add(data);
}
} catch (JSONException e) {
e.printStackTrace();
}
ArrayList<String> listdata = new ArrayList<String>();
JSONArray jArray = (JSONArray)jsonObject;
if (jArray != null) {
listdata.addAll(jArray);
}
ObjectMapper mapper = new ObjectMapper();
JSONArray array = new JSONArray();
array.put("IND");
array.put("CHN");
List<String> list = mapper.readValue(array.toString(), List.class);
JSONArray data = jsonObject.getJSONArray("some-node");
List<JSONObject> list = StreamSupport.stream(data.spliterator(), false)
.map(e -> (JSONObject)e)
.collect(Collectors.toList());
JSONArray data = new JSONArray(); //create data from this -> [{"thumb_url":"tb-1370913834.jpg","event_id":...}]
List<JSONObject> list = data.stream().map(o -> (JSONObject) o).collect(Collectors.toList());
public static List<String> convertJsonArrayToStringList(JsonArray ja){
List<String> result = new ArrayList<String>();
for(JsonElement je: ja)
result.add(je.getAsString());
return result;
}
String value = "[\"value1\",\"value2\"]";
List<String> result = new Gson().fromJson(value, List.class);
List<String> names = new Gson().fromJson(classData.getAsJsonObject("result").getAsJsonArray("names").toString(), new TypeToken<List<String>>(){}.getType());
{
"result": {
"id": "104297",
"class": "Chemistry",
"total": 57,
"names": [
"Alex",
"Dan",
"Rex",
"Tony",
"Elizabeth"
],
...
}
}
val arr = Gson().fromJson(jsonArrayInString, Array<T>::class.java)