java 如何解析JSON

Python014

java 如何解析JSON,第1张

一、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字符串,核心函数是:publicstaticStringcreateJsonString(Stringkey,Objectvalue){JSONObjectjsonObject=newJSONObject()jsonObject.put(key,value)returnjsonObject.toString()}B、客户端将json字符串转换为相应的javaBean1、客户端获取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-generatedcatchblocke.printStackTrace()}catch(IOExceptione){//TODOAuto-generatedcatchblocke.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-generatedcatchblocke.printStackTrace()}returnjsonStr}}2、获取javaBeanpublicstaticPersongetPerson(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-generatedcatchblocke.printStackTrace()}returnperson}publicstaticListgetPersons(StringjsonStr){Listlist=newArrayList()JSONObjectjsonObjtry{//将json字符串转换为json对象jsonObj=newJSONObject(jsonStr)//得到指定jsonkey对象的value对象JSONArraypersonList=jsonObj.getJSONArray("persons")//遍历jsonArrayfor(inti=0i

使用原生的解析:

String json = "..."

//遍历数组里的值,得到每个独立的对象,然后获取对应的值设置到声明好的对象中,最终创建对象完成后添加到集合中,如我自己代码里的片段:

for (int j = 0j <array.length()j++) {

obj = array.getJSONObject(j)

Data data = new Data()

mDataList.add(data)

}

数组声明

在数组的声明格式里,“数据类型”是声明数组元素的数据类型,可以是java语言中任意的数据类型,包括简单类型和结构类型。“数组名”是用来统一这些相同数据类型的名称,其命名规则和变量的命名规则相同。

数组声明之后,接下来便是要分配数组所需要的内存,这时必须用运算符new,其中“个数”是告诉编译器,所声明的数组要存放多少个元素,所以new运算符是通知编译器根据括号里的个数,在内存中分配一块空间供该数组使用。利用new运算符为数组元素分配内存空间的方式称为动态分配方式。

以上内容参考:百度百科-数组