Android入门之json解析

来源:互联网 发布:证券开户数据 编辑:程序博客网 时间:2024/05/19 04:26

首先,JSON是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。

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

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

JSON具有以下这些形式:

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

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

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

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

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

object
{}
{
 members }
members
pair
pair , members
pair
string : value
array
[]
[
 elements ]
elements
value 
value , elements
value
string
number
object
array
true
false
null
string
""
"
 chars "
chars
char
char chars
char
any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/
\b
\f
\n
\r
\t
\u
 four-hex-digits
number
int
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。

0 0