对于JSONObject转换Map与JSONArray转换List方式感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍jsonobject转list,并为您提供关于011-JSON、JSONOb
对于JSONObject 转换Map与JSONArray转换List方式感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍jsonobject转list,并为您提供关于011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List的有用信息。
本文目录一览:- JSONObject 转换Map与JSONArray转换List方式(jsonobject转list
- 011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List
- android – org.json.jsonarray无法转换为jsonobject错误
- Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断
- FastJSON--Java对象、集合转换成JSONObject、JSONArray
JSONObject 转换Map与JSONArray转换List方式(jsonobject转list
很多情况下大家习惯性对数据类型进行强转,然后会报出类似can not case JSONObject to Map。。。的错误信息,以下给出两种转换方式,供大家参考使用
if(jsonObj instanceof JSONObject){
LinkedHashMap linkMap = JSONObject.parseObject(JSON.toJSONString(jsonObj),LinkedHashMap.class, Feature.OrderedField);
} else if(jsonObj instanceof JSONArray){
LinkedList subAry = JSONArray.parseObject(JSON.toJSONString(jsonObj), LinkedList.class, Feature.OrderedField);
}
011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List
一、JSON数据格式
1.1、常用JSON数据格式
1、对象方式:JSONObject的数据是用 { } 来表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
2、数组方式:JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如:[ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
1.2、JSON、JSONObject、JSONArray使用
对象/数组 | toJSONString | parse | parseObject | parseArray |
JSON | 对象/数组 | 数据是对象时,返回:JSONObject的Object 数据是数组时,返回:JSONArray的Object |
对象 | 数组 |
JSONObject | 对象/数组 | 数据是对象时,返回:JSONObject的Object 数据是数组时,返回:JSONArray的Object |
对象 | 数组 |
JSONArray | 对象/数组 | 数据是对象时,返回:JSONObject的Object 数据是数组时,返回:JSONArray的Object |
对象 | 数组 |
parseObject:泛型实现 返回 具体bean;非泛型实现 返回 JSONObject
parseArray:泛型实现 返回 具体List<bean>;非泛型实现 返回 JSONArray<JSONObject>
parse:相当于parseObject和parseArray的非泛型实现
工具类Person


public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public Person() {
}
@Override
public String toString() {
return "Person{" +
"name=''" + name + ''\'''' +
", age=" + age +
''}'';
}
}
1.2.1、数据是 对象 方式测试【parseObject】


/**
* 数据是 对象 测试
*/
public class ObjectJsonTest {
@Test
public void testtoJSONString(){
Person person = new Person("aa", 1);
String s1 = JSON.toJSONString(person);
System.out.println(s1);
String s2 = JSONObject.toJSONString(person);
System.out.println(s2);
String s3 = JSONArray.toJSONString(person);
System.out.println(s3);
}
@Test
public void testparseObject(){
Person person = new Person("aa", 1);
String s1 = JSON.toJSONString(person);
System.out.println(s1);
Person p1 = JSON.parseObject(s1, Person.class);
JSONObject jsonObject = JSON.parseObject(s1);
System.out.println(p1);
Person p2 = JSONObject.parseObject(s1, Person.class);
System.out.println(p2);
Person p3 = JSONArray.parseObject(s1, Person.class);
System.out.println(p3);
}
/**
* 失败
*/
@Test
public void testparseArray(){
Person person = new Person("aa", 1);
String s1 = JSON.toJSONString(person);
System.out.println(s1);
//失败:转数组 必须是 list
List<Person> p1 = JSON.parseArray(s1, Person.class);
System.out.println(p1);
//失败:转数组 必须是 list
List<Person> p2 = JSONObject.parseArray(s1, Person.class);
System.out.println(p2);
//失败:转数组 必须是 list
List<Person> p3 = JSONArray.parseArray(s1, Person.class);
System.out.println(p3);
}
}
1.2.2、数据是 数组 方式测试【parseArray】


/**
* 数据是 数组 测试
*/
public class ArrayJsonTest {
@Test
public void testtoJSONString(){
Person person = new Person("aa", 1);
List<Person> list =new ArrayList<>();
list.add(person);
String s1 = JSON.toJSONString(list);
System.out.println(s1);
String s2 = JSONObject.toJSONString(list);
System.out.println(s2);
String s3 = JSONArray.toJSONString(list);
System.out.println(s3);
}
//失败
@Test
public void testparseObject(){
Person person = new Person("aa", 1);
List<Person> list =new ArrayList<>();
list.add(person);
String s1 = JSON.toJSONString(list);
System.out.println(s1);
//失败:转对象 必须是 {}
Person p1 = JSON.parseObject(s1, Person.class);
System.out.println(p1);
//失败:转对象 必须是 {}
Person p2 = JSONObject.parseObject(s1, Person.class);
System.out.println(p2);
//失败:转对象 必须是 {}
Person p3 = JSONArray.parseObject(s1, Person.class);
System.out.println(p3);
}
@Test
public void testparseArray(){
Person person = new Person("aa", 1);
List<Person> list =new ArrayList<>();
list.add(person);
String s1 = JSON.toJSONString(list);
System.out.println(s1);
List<Person> p1 = JSON.parseArray(s1, Person.class);
System.out.println(p1);
List<Person> p2 = JSONObject.parseArray(s1, Person.class);
System.out.println(p2);
List<Person> p3 = JSONArray.parseArray(s1, Person.class);
System.out.println(p3);
}
}
1.2.3、非泛型示例【主要是parseObject、parseArray以及parse】


/**
* 非泛型示例
*/
public class JSONObjectJsonTest {
//数据是 对象
@Test
public void testparseObject1(){
Person person = new Person("aa", 1);
String s1 = JSON.toJSONString(person);
System.out.println(s1);
JSONObject p1 = JSON.parseObject(s1);
System.out.println(p1);
System.out.println(p1.getString("name"));
JSONObject p2 = JSONObject.parseObject(s1);
System.out.println(p2);
JSONObject p3 = JSONArray.parseObject(s1);
System.out.println(p3);
}
//数据是 对象
@Test
public void testparseObject2(){
Person person = new Person("aa", 1);
String s1 = JSON.toJSONString(person);
System.out.println(s1);
Object p1 = JSON.parse(s1);
System.out.println(p1.getClass());
System.out.println(p1);
Object p2 = JSONObject.parse(s1);
System.out.println(p2.getClass());
System.out.println(p2);
Object p3 = JSONArray.parse(s1);
System.out.println(p3.getClass());
System.out.println(p3);
}
//数据是 数组
@Test
public void testparseArray1(){
Person person = new Person("aa", 1);
List<Person> list =new ArrayList<>();
list.add(person);
String s1 = JSON.toJSONString(list);
System.out.println(s1);
JSONArray p1 = JSON.parseArray(s1);
System.out.println(p1);
JSONArray p2 = JSONObject.parseArray(s1);
System.out.println(p2);
JSONArray p3 = JSONArray.parseArray(s1);
System.out.println(p3);
}
//数据是 数组
@Test
public void testparseArray2(){
Person person = new Person("aa", 1);
List<Person> list =new ArrayList<>();
list.add(person);
String s1 = JSON.toJSONString(list);
System.out.println(s1);
JSONArray p1 = (JSONArray)JSON.parse(s1);
System.out.println(p1.getClass());
System.out.println(p1);
Object p2 = JSONObject.parse(s1);
System.out.println(p2.getClass());
System.out.println(p2);
Object p3 = JSONArray.parse(s1);
System.out.println(p3.getClass());
System.out.println(p3);
}
}
二、JSON数组形式字符串转换为List<Map<String,String>>的8种方法
public class JsonToLIstMapTest {
String strArr = "[{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}," +
"{\"00\":\"zhangsan\",\"11\":\"lisi\",\"22\":\"wangwu\",\"33\":\"maliu\"}]";
@Test
public void test(){
//第一种方式
List<Map<String,String>> listObjectFir = (List<Map<String,String>>) JSONArray.parse(strArr);
System.out.println("1、利用JSONArray中的parse方法来解析json数组字符串");//com.alibaba.fastjson.JSONObject
System.out.println("类型:"+listObjectFir.get(0).getClass());
for(Map<String,String> mapList : listObjectFir){
for (Map.Entry entry : mapList.entrySet()){
System.out.println( entry.getKey() + " " +entry.getValue());
}
}
//第二种方式
List<Map<String,String>> listObjectSec = JSONArray.parseObject(strArr,List.class);
System.out.println("2、利用JSONArray中的parseObject方法并指定返回类型来解析json数组字符串");//com.alibaba.fastjson.JSONObject
System.out.println("类型:"+listObjectSec.get(0).getClass());
for(Map<String,String> mapList : listObjectSec){
for (Map.Entry entry : mapList.entrySet()){
System.out.println( entry.getKey() + " " +entry.getValue());
}
}
//第三种方式
JSONArray listObjectThir = JSONArray.parseArray(strArr);
System.out.println("3、利用JSONArray中的parseArray方法来解析json数组字符串");
System.out.println("类型:"+listObjectThir.get(0).getClass());//com.alibaba.fastjson.JSONObject
for(Object mapList : listObjectThir){
for (Object entry : ((Map)mapList).entrySet()){
System.out.println(((Map.Entry)entry).getKey() + " " +((Map.Entry)entry).getValue());
}
}
//第四种方式
List listObjectFour = JSONArray.parseArray(strArr,Map.class);
System.out.println("4、利用JSONArray中的parseArray方法并指定返回类型来解析json数组字符串");
System.out.println("类型:"+listObjectFour.get(0).getClass());//java.util.HashMap
for(Object mapList : listObjectFour){
for (Object entry : ((Map)mapList).entrySet()){
System.out.println(((Map.Entry)entry).getKey() + " " +((Map.Entry)entry).getValue());
}
}
//第五种方式
JSONArray listObjectFifth = JSONObject.parseArray(strArr);
System.out.println("5、利用JSONObject中的parseArray方法来解析json数组字符串");
System.out.println("类型:"+listObjectFifth.get(0).getClass());//com.alibaba.fastjson.JSONObject
for(Object mapList : listObjectFifth){
for (Object entry : ((Map)mapList).entrySet()){
System.out.println(((Map.Entry)entry).getKey() + " " +((Map.Entry)entry).getValue());
}
}
//第六种方式
List listObjectSix = JSONObject.parseArray(strArr,Map.class);
System.out.println("6、利用JSONObject中的parseArray方法并指定返回类型来解析json数组字符串");
System.out.println("类型:"+listObjectSix.get(0).getClass());//java.util.HashMap
for(Object mapList : listObjectSix){
for (Object entry : ((Map)mapList).entrySet()){
System.out.println(((Map.Entry)entry).getKey() + " " +((Map.Entry)entry).getValue());
}
}
//第七种方式
JSONArray listObjectSeven = JSON.parseArray(strArr);
System.out.println("7、利用JSON中的parseArray方法来解析json数组字符串");
System.out.println("类型:"+listObjectSeven.get(0).getClass());//com.alibaba.fastjson.JSONObject
for(Object mapList : listObjectSeven){
for (Object entry : ((Map)mapList).entrySet()){
System.out.println(((Map.Entry)entry).getKey() + " " +((Map.Entry)entry).getValue());
}
}
//第八种方式
List listObjectEigh = JSONObject.parseArray(strArr,Map.class);
System.out.println("8、利用JSON中的parseArray方法并指定返回类型来解析json数组字符串");
System.out.println("类型:"+listObjectEigh.get(0).getClass());//java.util.HashMap
for(Object mapList : listObjectEigh){
for (Object entry : ((Map)mapList).entrySet()){
System.out.println(((Map.Entry)entry).getKey() + " " +((Map.Entry)entry).getValue());
}
}
}
}
android – org.json.jsonarray无法转换为jsonobject错误
在任何人的情况下更新的代码都需要这个的固定.
我的错误:
01-14 22:18:08.165: E/JSON Response:(419): > { "event":[ 01-14 22:18:08.165: E/JSON Response:(419): { 01-14 22:18:08.165: E/JSON Response:(419): "event_name":"Test Event",01-14 22:18:08.165: E/JSON Response:(419): "event_time":"7:00pm",01-14 22:18:08.165: E/JSON Response:(419): "event_price":"$15.00" 01-14 22:18:08.165: E/JSON Response:(419): } 01-14 22:18:08.165: E/JSON Response:(419): ] 01-14 22:18:08.165: E/JSON Response:(419): } 01-14 22:18:08.175: E/Json Error(419): Error: org.json.JSONException: Value [{"event_price":"$15.00","event_time":"7:00pm","event_name":"Test Event"}] at event of type org.json.JSONArray cannot be converted to JSONObject
MainActivity.java
package com.example.dba; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { String event_name,event_time,event_price; static JSONObject object =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new PrefetchData().execute(); } /** * Async Task to make http call */ private class PrefetchData extends AsyncTask<Void,Void,Void> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Void doInBackground(Void... arg0) { JsonParser jsonParser = new JsonParser(); String json = jsonParser.getJSONFromUrl("http://www.website/test.json"); Log.e("JSON Response: ","> " + json); if (json != null) { try { JSONObject parent = new JSONObject(json); JSONArray eventDetails = parent.getJSONArray("event"); for(int i=0; i < eventDetails.length(); i++) { object = eventDetails.getJSONObject(i); event_name = object.getString("event_name"); event_time = object.getString("event_time"); event_price = object.getString("event_price"); Log.e("JSON","> " + event_name + event_time + event_price ); } } catch (JSONException e) { Log.e("Json Error","Error: " + e.toString()); e.printstacktrace(); } } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); Intent i = new Intent(MainActivity.this,Events.class); i.putExtra("event_name",event_name); i.putExtra("event_time",event_time); i.putExtra("event_price",event_price); startActivity(i); // close this activity finish(); } } } }
解决方法
JSONObject eventDetails = parent.getJSONObject("event");
至:
JSONArray eventDetails = parent.getJSONArray("event");
Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断
1.Fastjson
我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢?
try{ Object object = JSON.parse(a); if (object instanceof JSONObject){ //JSONObject } if (object instanceof JSONArray){ //JSONArray } }catch (com.alibaba.fastjson.JSONException e){ //非JSON字符串 }
2.org.json.JSON
直接使用JSON库做解析的情况不多,但是这里也稍微写一下
log.info(JSON.parse(jsonStr).getClass().getName()); try { Object json = new JSONTokener(jsonStr).nextValue(); log.info( json.getClass().toString()); // json.toString(); if(json instanceof JSONObject){ log.info("is JSONObject"); JSONObject jsonObject = (JSONObject)json; //further actions on jsonObjects //... }else if (json instanceof JSONArray){ log.info("is JSONArray"); JSONArray jsonArray = (JSONArray)json; //further actions on jsonArray //... } }catch (Exception e){ e.printstacktrace(); }
3.GSON,也是蛮强大的一个库,没有依赖包,只是在反射到Map的使用上有点麻烦。
GSON里面最有意思的就是JsonPrimitive,原始JSON。
先给代码
String str = ""; JsonParser jsonParser = new JsonParser(); try{ JsonElement jsonElement = jsonParser.parse(str); log.info("jsonElement "+jsonElement.getClass().getName()); if (jsonElement.isJsonObject()){ //JsonObject log.info(jsonElement.getAsJsonObject().get("aa").getAsstring()); } if (jsonElement.isJsonArray()){ //JsonArray log.info(jsonElement.getAsJsonArray().get(0).getAsJsonObject().get("aa").getAsstring()); } if (jsonElement.isJsonNull()){ //空字符串 log.info(jsonElement.getAsstring()); } if (jsonElement.isJsonPrimitive()){ log.info(jsonElement.getAsstring()); } }catch (Exception e){ //非法 // e.printstacktrace(); log.info("非法 "+e.getMessage()); }
可知,GSON中定义了四个JSON类型,分别是JSONObject,JSONArray,JSONPrimitive,JSONNull。
但是官方对JSON的严格定义是{}为JSONObject,[]为JSONArray。
所以只用JsonElement jsonElement = jsonParser.parse(str);能正常解析的字符串并不意味着是一个合法的JSON,必须满足
jsonElement.isJsonObject()或者jsonElement.isJsonArray()。
另说一个题外话,关于对jsonElement.getAsJsonPrimitive()方法的理解。
JsonPrimitive即时指JSON value的原始数据,包含三种类型,数字,双引号包裹的字符串,布尔。
所以JsonPrimitive.toString得到的不是实际的值,而是JSON中的:后面的完整内容,需要再做一次getAs。
例如
String str = "{\"aa\":\"aa\"}"; JsonElement jsonElement = jsonParser.parse(str); log.info(jsonElement.getAsJsonObject().get("aa").getAsstring()); str = "{\"aa\":true}"; jsonElement = jsonParser.parse(str); jsonElement.getAsJsonObject().get("aa").getAsBoolean(); str = "{\"aa\":1.2}"; jsonElement.getAsJsonObject().get("aa").getAsBigDecimal();
所以Gson还有一个好处就是自带转换为java常规类型。
FastJSON--Java对象、集合转换成JSONObject、JSONArray
Student student=new Student();
// Java对象转JSONObect对象
JSONObject jsonObject=(JSONObject) JSONObject.toJSON(studentDTO.getCla***oom());
JSONObject jsonObject2=JSONObject.parseObject(JSON.toJSONString(student.getCla***oom()));
student.setCla***oom(jsonObject);
// Java集合转JSON数组
JSONArray jsonArray=(JSONArray) JSONArray.toJSON(studentDTO.getTeachers());
JSONArray jsonArray2= JSONArray.parseArray( JSON.toJSONString(studentDTO.getCla***oom()) ) ;
我们今天的关于JSONObject 转换Map与JSONArray转换List方式和jsonobject转list的分享就到这里,谢谢您的阅读,如果想了解更多关于011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List的相关信息,可以在本站进行搜索。
本文标签: