您的位置:首页 > 移动开发 > Android开发

Android入门之json解析

2016-11-03 21:27 357 查看
首先,JSON是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。

JSON建构于两种结构:“名称/值”对的集合。不同的语言中,它被理解为对象,记录等。

值的有序列表。大部分语言中,它被理解为数组。

JSON具有以下这些形式:

对象(object)是一个无序的“名称/值”对的集合。一个对象以“{”开始,“}”结束。每个名称之后跟一个“:”,“名称/值”对之间使用“,”分隔。

数组(array)是值的有序集合,一个数组以“[”开始,“]”结束。值之间用逗号分隔。

值(value)可以是双引号括起来的字符串,数值(number)、true、false、null、对象,或者数组。这些结构可以嵌套。

字符串(string)是由双引号包围的任意数量unicode字符的集合,使用反斜线转义。一个字符即一个单独的字符串。

数值(number)与C或者java的数值相似。

object{}

{
 members }memberspair

pair , memberspairstring : valuearray[]

[
 elements ]elementsvalue 

value , elementsvaluestring

number

object

array
true

false

null
string""

"
 chars "charschar

char charscharany-Unicode-character-

    except-"-or-\-or-

    control-character
\"

\\

\/

\b

\f

\n

\r

\t

\u
 four-hex-digitsnumberint

int frac
然后是json在android中的解析。例如解析以下Json片段:

{

         "poster_path":"\/uSHjeRVuObwdpbECaXJnvyDoeJK.jpg",

         "adult":false,

         "overview":"A teenager finds himself transported to an island where he must help protect a group of orphans with special powers from creatures intent on destroying them.",

         "release_date":"2016-09-28",

         "genre_ids":[

            14

         ],

         "id":283366,

         "original_title":"Miss Peregrine's Home for Peculiar Children",

         "original_language":"en",

         "title":"Miss Peregrine's Home for Peculiar Children",

         "backdrop_path":"\/qXQinDhDZkTiqEGLnav0h1YSUu8.jpg",

         "popularity":21.385542,

         "vote_count":185,

         "video":false,

         "vote_average":6.1

      }

简单的解析有以下代码片段示例:

String reponse=null;

URL url=new URL(requrl);//requrl为获得json内容的网址

HttpURLConnection conn=(HttpURLConnection)url.openConnection();

conn.setRequestMethod("GET");

InputStream in=new BufferedInputStream(conn.getInputStream());

BufferedReader reader=new BufferedReader(new InputStreamReader(in));

StringBuilder sb=new StringBuilder();

String line;

while((line=reader.readLine())!=null) sb.append(line).append('\n');

reponse=sb.toString();

JSONObject js=new JSONObject(reponse);//用JSONObject来获取json对象

JSONArray contacts=js.getJSONArray("result");//用JSONObject来获取json数组

for(int i=0;i<contacts.length();i++){

JSONObjcet c=contacts.getJSONObjcet(i);//获取数组中的对象,每一个对象内容都与上述过程中给出的json代码块格式相同

String id=c.getString("id");

String poster=c.getString("poster_path");

String overview=c.getString("overview");

}

以上是json解析的一些基本的关键代码,在最后的for循环体重已经将上述中给出的json片段中的id、poster_path、overview的内容存储到了变量中。在实际应用中,需要将上述代码段写入try...catch中。网络连接和json解析都是较为耗时的工作,都不能再UI线程中执行。所以上述代码需要利用asynctesk或者是service。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json android