一、 JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。
Json建构于两种结构:
1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 如:
“name”:”jackson”,。
“age”:100
2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)如:
“students”:
{“name”:”jackson”,“age”:100},。
{“name”:”michael”,”age”:51}。
二、java解析JSON步骤
A、服务器端将数据转换成json字符串。
首先、服务器端项目要导入json的jar包和json所依赖的jar包至builtPath路径下(这些可以到JSON-lib官网下载:http://json-lib.sourceforge.net/)
然后将数据转为json字符串,核心函数是:
public static String createJsonString(String key, Object value)。
JSONObject jsonObject = new JSONObject();。
jsonObject.put(key, value);。
return jsonObject.toString();。
B、客户端将json字符串转换为相应的javaBean。
1、客户端获取json字符串(因为android项目中已经集成了json的jar包所以这里无需导入)
public class HttpUtil。
public static String getJsonContent(String urlStr)。
try
{// 获取HttpURLConnection连接对象。
URL url = new URL(urlStr);。
HttpURLConnection httpConn = (HttpURLConnection) url。
.openConnection();。
// 设置连接属性
httpConn.setConnectTimeout(3000);。
httpConn.setDoInput(true);。
httpConn.setRequestMethod("GET");。
// 获取相应码
int respCode = httpConn.getResponseCode();。
if (respCode == 200)。
return ConvertStream2Json(httpConn.getInputStream());。
catch (MalformedURLException e)。
// TODO Auto-generated catch block。
e.printStackTrace();。
catch (IOException e)。
// TODO Auto-generated catch block。
e.printStackTrace();。
return "";
private static String ConvertStream2Json(InputStream inputStream)。
String jsonStr = "";。
// ByteArrayOutputStream相当于内存输出流。
ByteArrayOutputStream out = new ByteArrayOutputStream();。
byte[] buffer = new byte[1024];。
int len = 0;
// 将输入流转移到内存输出流中。
try
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)。
out.write(buffer, 0, len);。
// 将内存流转换为字符串
jsonStr = new String(out.toByteArray());。
catch (IOException e)。
// TODO Auto-generated catch block。
e.printStackTrace();。
return jsonStr;。
2、获取javaBean
public static Person getPerson(String jsonStr)。
Person person = new Person();。
try
{// 将json字符串转换为json对象。
JSONObject jsonObj = new JSONObject(jsonStr);。
// 得到指定json key对象的value对象。
JSONObject personObj = jsonObj.getJSONObject("person");。
// 获取之对象的所有属性
person.setId(personObj.getInt("id"));。
person.setName(personObj.getString("name"));。
person.setAddress(personObj.getString("address"));。
catch (JSONException e)。
// TODO Auto-generated catch block。
e.printStackTrace();。
return person;
public static List<Person> getPersons(String jsonStr)。
List<Person> list = new ArrayList<Person>();。
JSONObject jsonObj;。
try
{// 将json字符串转换为json对象。
jsonObj = new JSONObject(jsonStr);。
// 得到指定json key对象的value对象。
JSONArray personList = jsonObj.getJSONArray("persons");。
// 遍历jsonArray
for (int i = 0; i < personList.length(); i++)。
// 获取每一个json对象
JSONObject jsonItem = personList.getJSONObject(i);。
// 获取每一个json对象的值。
Person person = new Person();。
person.setId(jsonItem.getInt("id"));。
person.setName(jsonItem.getString("name"));。
person.setAddress(jsonItem.getString("address"));。
list.add(person);。
catch (JSONException e)。
// TODO Auto-generated catch block。
e.printStackTrace();。
return list;
vue页面内容
<el-table
:data="lists"
height="400px"
size="small"
border="true"
stripe="true">。
<el-table-column prop="name" label="姓名" width="200"></el-table-column>。
<el-table-column prop="age" label="年龄" width="60"></el-table-column>。
</el-table>。
js部分:
data: function () {。
return {
lists: [
{name:'张三', age: '22'},。
{name:'李四', age: '23'},。
{name:'王五', age: '24'},。
json数据格式解析我自己分为两种;
一种是普通的,一种是带有数组形式的;
普通形式的:
服务器端返回的json数据格式如下:
复制代码代码如下:
{"userbean":{"Uid":"100196","Showname":"\u75af\u72c2\u7684\u7334\u5b50","Avtar":null,"State":1}}。
分析代码如下:
复制代码代码如下:
// TODO 状态处理 500 200 。
int res = 0; 。
res = httpClient.execute(httpPost).getStatusLine().getStatusCode(); 。
if (res == 200) { 。
/* 。
* 当返回码为200时,做处理 。
* 得到服务器端返回json数据,并做处理 。
* */ 。
HttpResponse httpResponse = httpClient.execute(httpPost); 。
StringBuilder builder = new StringBuilder(); 。
BufferedReader bufferedReader2 = new BufferedReader( 。
new InputStreamReader(httpResponse.getEntity().getContent())); 。
String str2 = ""; 。
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2 。
.readLine()) { 。
builder.append(s); 。
} 。
Log.i("cat", ">>>>>>" + builder.toString());。
JSONObject jsonObject = new JSONObject(builder.toString()) 。
.getJSONObject("userbean");。
String Uid; 。
String Showname; 。
String Avtar; 。
String State;。
Uid = jsonObject.getString("Uid"); 。
Showname = jsonObject.getString("Showname"); 。
Avtar = jsonObject.getString("Avtar"); 。
State = jsonObject.getString("State");。
带数组形式的:
服务器端返回的数据格式为:
复制代码代码如下:
{"calendar":
{"calendarlist": 。
[
{"calendar_id":"1705","title":"(\u4eb2\u5b50)ddssd","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288927800","endshowtime":"1288931400","allDay":false}, 。
{"calendar_id":"1706","title":"(\u65c5\u884c)","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288933200","endshowtime":"1288936800","allDay":false} 。
]
}
分析代码如下:
复制代码代码如下:
// TODO 状态处理 500 200 。
int res = 0; 。
res = httpClient.execute(httpPost).getStatusLine().getStatusCode(); 。
if (res == 200) { 。
/* 。
* 当返回码为200时,做处理 。
* 得到服务器端返回json数据,并做处理 。
* */ 。
HttpResponse httpResponse = httpClient.execute(httpPost); 。
StringBuilder builder = new StringBuilder(); 。
BufferedReader bufferedReader2 = new BufferedReader( 。
new InputStreamReader(httpResponse.getEntity().getContent())); 。
String str2 = ""; 。
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2 。
.readLine()) { 。
builder.append(s); 。
} 。
Log.i("cat", ">>>>>>" + builder.toString()); 。
/** 。
* 这里需要分析服务器回传的json格式数据,
*/ 。
JSONObject jsonObject = new JSONObject(builder.toString()) 。
.getJSONObject("calendar"); 。
JSONArray jsonArray = jsonObject.getJSONArray("calendarlist"); 。
for(int i=0;i<jsonArray.length();i++){ 。
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i); 。
CalendarInfo calendarInfo = new CalendarInfo(); 。
calendarInfo.setCalendar_id(jsonObject2.getString("calendar_id")); 。
calendarInfo.setTitle(jsonObject2.getString("title")); 。
calendarInfo.setCategory_name(jsonObject2.getString("category_name")); 。
calendarInfo.setShowtime(jsonObject2.getString("showtime")); 。
calendarInfo.setEndtime(jsonObject2.getString("endshowtime")); 。
calendarInfo.setAllDay(jsonObject2.getBoolean("allDay")); 。
calendarInfos.add(calendarInfo); 。
}。
总结,普通形式的只需用JSONObject ,带数组形式的需要使用JSONArray 将其变成一个list。
帮你解析部分吧,其他的模仿就行了,运行下试试看,记得导入包。
JSONObject jsonObject = JSONObject.fromObject("你的JSON串");。
JSONArray results = JSONArray.fromObject(jsonObject.get("results"));。
for (int i = 0; i < results.size(); i++) {。
if(i > 0) {。
break;
}
JSONObject result = JSONObject.fromObject(results.get(i));。
JSONObject user = JSONObject.fromObject(result.get("user"));。
System.out.println("gender:" + user.get("gender"));。
JSONObject name = JSONObject.fromObject(user.get("name"));。
System.out.println("title:" + name.get("title"));。
}
1、使用原生的解析:
String json = "...";。
JSONArray array= new JSONArray(json);。
//遍历数组里的值,得到每个独立的对象,然后获取对应的值设置到声明好的对象中,最终创建对象完成后添加到集合中,如我自己代码里的片段:。
for (int j = 0; j < array.length(); j++) {。
obj = array.getJSONObject(j);。
Data data = new Data();。
data.setThumbnail(obj.getString("thumbnail"));。
data.setTitle(obj.getString("title"));。
data.setUrl(obj.getString("url"));。
mDataList.add(data);。
2、使用第三方包如Gson,但是这个你得保证你的JSON字符串个z。