最近很多小伙伴都在问如何在Android中使用Java和org.json迭代这个JSON数组?和androidjson这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Android
最近很多小伙伴都在问如何在Android中使用Java和org.json迭代这个JSON数组?和android json这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Android / Java中的JSON数组迭代、android – 如何从这个json对象中提取字符串数组?、android – 如何使用JSON对象传递JSON数组、Android-Gson解析JSON数据(JSON对象/JSON数组)等相关知识,下面开始了哦!
本文目录一览:- 如何在Android中使用Java和org.json迭代这个JSON数组?(android json)
- Android / Java中的JSON数组迭代
- android – 如何从这个json对象中提取字符串数组?
- android – 如何使用JSON对象传递JSON数组
- Android-Gson解析JSON数据(JSON对象/JSON数组)
如何在Android中使用Java和org.json迭代这个JSON数组?(android json)
我的JSON字符串看起来像这样(包含在一个名为sJSON的字符串变量中):
[
{"id":284}
],
[
{"name":John,"surname":Doe},
{"name":Jane,"surname":Doe}
]
我能够像这样解析第一个数组(使用Java并导入org.json):
JSONArray arrjson = new JSONArray(sJSON);
JSONObject jsonGeneralData = new JSONObject(arrjson.get(0).toString());
String sResult = jsonGeneralData.get("id").toString();
返回预期的结果,即284.我正在努力获得第二个项目数组,并迭代它们.我不确定我的JSON字符串是否格式错误,或者我是否试图以错误的方式访问它.这是我试过的:
JSONObject jsonPersonData = new JSONObject(arrjson.get(1).toString());
这是我得到的,我无法弄清楚如何循环第二个数组内的单个项目.
编辑:
看来这行只解析方括号中的第一个字符串:
JSONArray arrjson = new JSONArray(sJSON);
JSON是错误的(与上面相同的例子),还是它没有正确解析它?我已经设法通过对字符串进行拆分并将它们分别放在自己的JSONArray中来解决问题,但我认为这不是最好的做事方式.
解决方法:
你想要这样的东西..
JSONArray jsonArray = new JSONArray(sJSON);
JSONArray jsonPersonData = jsonArray.getJSONArray(1);
for (int i=0; i<jsonPersonData.length(); i++) {
JSONObject item = jsonPersonData.getJSONObject(i);
String name = item.getString("name");
String surname = item.getString("surname");
}
Android / Java中的JSON数组迭代
我正在构建一个需要下载并与在线数据库同步的android应用,我将查询从该应用发送到php页面,该页面以JSON格式返回数据库中的相关行。
有人可以告诉我迭代JSON数组的最佳方法吗?
我收到一个对象数组:
[{json object},{json object},{json object}]
我可以用来访问数组中的JSONObjects的最简单的代码是什么?
编辑:现在,我想到它,我用来迭代循环的方法是:
for (String row: json){ id = row.getInt("id"); name = row.getString("name"); password = row.getString("password");}
所以我想我已经能够以某种方式将返回的Json变成可迭代的数组。有什么想法可以实现这一目标吗?
我为自己的冒昧表示歉意,但我是通过网上发现的一个示例进行此操作的,此后一直找不到。
答案1
小编典典我已经用两种不同的方式做到了
1.) make a Map
HashMap<String, String> applicationSettings = new HashMap<String,String>(); for(int i=0; i<settings.length(); i++){ String value = settings.getJSONObject(i).getString("value"); String name = settings.getJSONObject(i).getString("name"); applicationSettings.put(name, value); }
2.) make a JSONArray of names
JSONArray names = json.names(); JSONArray values = json.toJSONArray(names); for(int i=0; i<values.length(); i++){ if (names.getString(i).equals("description")){ setDescription(values.getString(i)); } else if (names.getString(i).equals("expiryDate")){ String dateString = values.getString(i); setExpiryDate(stringToDateHelper(dateString)); } else if (names.getString(i).equals("id")){ setId(values.getLong(i)); } else if (names.getString(i).equals("offerCode")){ setOfferCode(values.getString(i)); } else if (names.getString(i).equals("startDate")){ String dateString = values.getString(i); setStartDate(stringToDateHelper(dateString)); } else if (names.getString(i).equals("title")){ setTitle(values.getString(i)); } }
android – 如何从这个json对象中提取字符串数组?
我正在尝试使用org.json中的类从以下json对象获取可用数字列表
{
"response":true,
"state":1,
"data":
{
"CALLERID":"81101099",
"numbers":
[
"21344111","21772917",
"28511113","29274472",
"29843999","29845591",
"30870001","30870089",
"30870090","30870091"
]
}
}
在从Web服务接收到json对象后,我的第一步是:
jsonObj = new JSONObject(response);
jsonData = jsonObj.optJSONObject("data");
现在,如何保存数字的字符串数组?
解决方法:
采用:
jsonObj = new JSONObject(response);
jsonData = jsonObj.optJSONObject("data");
JSONArray arrjson = jsonData.getJSONArray("numbers");
String[] arr = new String[arrjson.length()];
for(int i = 0; i < arrjson.length(); i++)
arr[i] = arrjson.getString(i);
android – 如何使用JSON对象传递JSON数组
例如,我首先有两个类别 – 电子设备和第二个设备 – 仍然每当我点击设备类别时 – 它显示所有项目(从电子设备1到设备2),而它必须仅显示设备类别下的项目
问题
仍然显示ViewPager中的所有项目,无论用户点击了哪个类别….我怎样才能显示属于tapped类别的那些项目?
public class MainActivity extends Activity { ArrayList<Items> itemsArrayList; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); itemsArrayList = new ArrayList<Items>(); ... gridView.setonItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0,View arg1,int position,long id) { String categoryName = menusArrayList.get(position).getName().toString(); Log.d("categoryName:",categoryName); menus = menusArrayList.get(position); itemsArrayList = menus.getItemsArrayList(); adapter = new ViewPagerAdapter(MenusActivity.this,R.layout.adapter_viewpager,itemsArrayList); viewPager.setAdapter(adapter); } }); } class JSONAsyncTask extends AsyncTask<String,Void,Boolean> { ProgressDialog dialog; @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Boolean doInBackground(String... urls) { try { ..... JSONArray jsonArray = jsonObject.getJSONArray("category"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jObject = jsonArray.getJSONObject(i); menus = new Menus(); menus.setName(jObject.getString("name")); menus.setimage(jObject.getString("image")); JSONArray imagesArray = jObject.getJSONArray("items"); for(int j=0; j<imagesArray.length(); j++) { JSONObject imagesObject = imagesArray.getJSONObject(j); items = new Items(); items.setTitle(imagesObject.getString("title")); items.setimage(imagesObject.getString("image")); itemsArrayList.add(items); } menus.setItemsArrayList(itemsArrayList); menusArrayList.add(menus); } return true; } ... return false; } protected void onPostExecute(Boolean result) { dialog.cancel(); ... } } }
解决方法
ArrayList<Items> itemsArrayList = new ArrayList<Items>(); for(int j=0; j<imagesArray.length(); j++) { JSONObject imagesObject = imagesArray.getJSONObject(j); items = new Items(); items.setTitle(imagesObject.getString("title")); items.setimage(imagesObject.getString("image")); itemsArrayList.add(items); }
Android-Gson解析JSON数据(JSON对象/JSON数组)
上一篇博客,Android-解析JSON数据(JSON对象/JSON数组),介绍了使用 org.json.JSONArray;/org.json.JSONObject; 来解析JSON数据;
Google Android 还提供来另外一种方式来解析JSON数据,那就是Gson;
Gson是非常方便的JSON解析/封装/处理等等,强大的工具类:
特点:Gson可以把JSON对象数据->转换映射为Bean对象
Gson可以把JSON数组数据->转换映射为集合
Gson可以把Bean对象->转换为JSON对象数据
Gson可以把集合->转换为JSON数组数据
...........
首先要在app/build.gradle配置文件中,导入,Gson支持包
// Gson支持包的导入
implementation ''com.google.code.gson:gson:2.6.2''
需要解析的JSON数据:
/data/data/liudeli.mynetwork01/files/pottingJSON1
{
"name":"李四",
"age":99,
"hobby":"爱好是练习截拳道"
}
/data/data/liudeli.mynetwork01/files/pottingJSONArray1
[
{
"name":"君君",
"age":89,
"sex":"男"
},
{
"name":"小君",
"age":99,
"sex":"女"
},
{
"name":"大君",
"age":88,
"sex":"男"
}
]
定义一个Bean
定义的name/age/hobby 必须要和JSON数据里面的一模一样
package liudeli.mynetwork01.entity;
/**
* 定义一个Bean
* 定义的name/age/hobby 必须要和JSON数据里面的一模一样
* {
* "name":"李四",
* "age":99,
* "hobby":"爱好是练习截拳道"
* }
*/
public class Student2 {
private String name;
private int age;
private String hobby;
public Student2(String name, int age, String hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
}
@Override
public String toString() {
return "Student{" +
"name=''" + name + ''\'''' +
", age=" + age +
", hobby=''" + hobby + ''\'''' +
''}'';
}
}
定义的name/age/sex 必须要和JSON数据里面的一模一样
package liudeli.mynetwork01.entity;
/**
* 定义一个Bean
* 定义的name/age/sex 必须要和JSON数据里面的一模一样
*
* [
* {
* "name":"君君",
* "age":89,
* "sex":"男"
* },
* {
* "name":"小君",
* "age":99,
* "sex":"女"
* },
* {
* "name":"大君",
* "age":88,
* "sex":"男"
* }
* ]
*/
public class Student {
private String name;
private int age;
private String sex;
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"name=''" + name + ''\'''' +
", age=" + age +
", sex=''" + sex + ''\'''' +
''}'';
}
}
GsonAnalyzeJSONActivity.java
package liudeli.mynetwork01;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;
import liudeli.mynetwork01.entity.Student;
import liudeli.mynetwork01.entity.Student2;
public class GsonAnalyzeJSONActivity extends Activity {
private final String TAG = GsonAnalyzeJSONActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gson_analyze);
}
/**
* Gson解析JSON对象
* {
* "name":"李四",
* "age":99,
* "hobby":"爱好是练习截拳道"
* }
*/
public void gonsAnalyzeJSONObject(View view) {
String jsonData = readFile("pottingJSON1");
// Log.d(TAG, "jsonData:" + jsonData);
Gson gson = new Gson();
Student2 student2 = gson.fromJson(jsonData, Student2.class);
Log.d(TAG, "gonsAnalyzeJSONObject 解析后的结果:" + student2.toString());
}
/**
* Gson解析JSON数组
* [
* {
* "name":"君君",
* "age":89,
* "sex":"男"
* },
* {
* "name":"小君",
* "age":99,
* "sex":"女"
* },
* {
* "name":"大君",
* "age":88,
* "sex":"男"
* }
* ]
* @param view
*/
public void gonsAnalyzeJSONArray(View view) {
String jsonData = readFile("pottingJSONArray1");
// Log.d(TAG, "jsonData:" + jsonData);
Gson gson = new Gson();
/**
* TypeToken<List<需要映射的Bean对象>>(){}.getType()
*/
List<Student> list = gson.fromJson(jsonData, new TypeToken<List<Student>>(){}.getType()); // 参数二:需要指定类型,类型来决定解析的集合
for (Student student: list) {
Log.d(TAG, "gonsAnalyzeJSONArray 解析后的结果:" + student.toString());
}
}
/**
* 读取文件里面的字符串
* @param fileName
* @return
*/
private String readFile(String fileName) {
String result = null;
try {
InputStream inputStream = openFileInput(fileName);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
baos.write(bytes, 0,bytes.length);
result = new String(baos.toByteArray());
baos.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
activity_gson_analyze.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gson解析JSON对象"
android:onClick="gonsAnalyzeJSONObject"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gson解析JSON数组"
android:onClick="gonsAnalyzeJSONArray"
/>
</LinearLayout>
日志的打印:
使用Gson解析,JSON对象数据:
12-23 23:00:52.108 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONObject 解析后的结果:Student{name=''李四'', age=99, hobby=''爱好是练习截拳道''}
使用Gson解析,JSON数组数据:
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''君君'', age=89, sex=''男''}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''小君'', age=99, sex=''女''}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''大君'', age=88, sex=''男''}
今天的关于如何在Android中使用Java和org.json迭代这个JSON数组?和android json的分享已经结束,谢谢您的关注,如果想了解更多关于Android / Java中的JSON数组迭代、android – 如何从这个json对象中提取字符串数组?、android – 如何使用JSON对象传递JSON数组、Android-Gson解析JSON数据(JSON对象/JSON数组)的相关知识,请在本站进行查询。
本文标签: