缘来如此 2014-03-31
一、JSON(JavaScriptObjectNotation)一种简单的数据格式,比xml更轻巧。
Json建构于两种结构:
1、“名称/值”对的集合(Acollectionofname/valuepairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hashtable),有键列表(keyedlist),或者关联数组(associativearray)。如:
{
“name”:”jackson”,
“age”:100
}
2、值的有序列表(Anorderedlistofvalues)。在大部分语言中,它被理解为数组(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之JAVA解析
然后将数据转为json字符串,核心函数是:
publicstaticStringcreateJsonString(Stringkey,Objectvalue)
{
JSONObjectjsonObject=newJSONObject();
jsonObject.put(key,value);
returnjsonObject.toString();
}
B、客户端将json字符串转换为相应的javaBean
1、客户端获取json字符串(因为android项目中已经集成了json的jar包所以这里无需导入)
publicclassHttpUtil
{
publicstaticStringgetJsonContent(StringurlStr)
{
try
{//获取HttpURLConnection连接对象
URLurl=newURL(urlStr);
HttpURLConnectionhttpConn=(HttpURLConnection)url
.openConnection();
//设置连接属性
httpConn.setConnectTimeout(3000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("GET");
//获取相应码
intrespCode=httpConn.getResponseCode();
if(respCode==200)
{
returnConvertStream2Json(httpConn.getInputStream());
}
}
catch(MalformedURLExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
catch(IOExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
return"";
}
privatestaticStringConvertStream2Json(InputStreaminputStream)
{
StringjsonStr="";
//ByteArrayOutputStream相当于内存输出流
ByteArrayOutputStreamout=newByteArrayOutputStream();
byte[]buffer=newbyte[1024];
intlen=0;
//将输入流转移到内存输出流中
try
{
while((len=inputStream.read(buffer,0,buffer.length))!=-1)
{
out.write(buffer,0,len);
}
//将内存流转换为字符串
jsonStr=newString(out.toByteArray());
}
catch(IOExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnjsonStr;
}
}
2、获取javaBean
publicstaticPersongetPerson(StringjsonStr)
{
Personperson=newPerson();
try
{//将json字符串转换为json对象
JSONObjectjsonObj=newJSONObject(jsonStr);
//得到指定jsonkey对象的value对象
JSONObjectpersonObj=jsonObj.getJSONObject("person");
//获取之对象的所有属性
person.setId(personObj.getInt("id"));
person.setName(personObj.getString("name"));
person.setAddress(personObj.getString("address"));
}
catch(JSONExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnperson;
}
publicstaticListgetPersons(StringjsonStr)
{
Listlist=newArrayList();
JSONObjectjsonObj;
try
{//将json字符串转换为json对象
jsonObj=newJSONObject(jsonStr);
//得到指定jsonkey对象的value对象
JSONArraypersonList=jsonObj.getJSONArray("persons");
//遍历jsonArray
for(inti=0;i