Android读取JSON格式数据

摘要:
Android读取JSON格式数据1.什么是JSON?最后,我们可以将JSON数据存储在字符串中,然后通过Android中内置的JSONObject和JSONArray类解析数据。

Android读取JSON格式数据

1. 何为JSON?

JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法。

  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言
  • JSON 具有自我描写叙述性,更易理解

相比 XML 的不同之处:

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 使用数组
  • 不使用保留字

JSON 使用 JavaScript 语法来描写叙述数据对象,可是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持很多不同的编程语言。

很多其它关于JSON内容的知识请出门左转:
http://www.w3school.com.cn/json/index.asp

2. JSON语法规则

以本文所使用的JSON文件内容为例:
test.json

{
    "language":[
        {"id":1, "ide":"Eclipse", "name":"Java"},
        {"id":2, "ide":"XCode", "name":"Swift"},
        {"id":3, "ide":"Visual Studio", "name":"C#"}
    ],
    "cat":"it"
}
  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

简单结合样例我们就非常清楚地知道JSON的语法规则,每个JSON数据对象都是保存在花括号之中的,所以我们每个JSON数据文件都是以花括号开头和结尾的;JSON对象的数据是以键值对的形式存放起来的,键必须为字符串,值能够是例如以下各种类型:

  • 数字(整数或浮点数)
  • 字符串(在双引號中)
  • 逻辑值(true 或 false)
  • 数组(在方括号里)
  • 对象(在花括号里)
  • null

另外,JSON能够嵌套使用,JSON对象中能够存放JSON对象,数组中也能够存放JSON对象,仅仅要符合语法规则,一切以实际操作须要为主。
对于各种JSON数据的深入操作,个人建议能够通过各大互联网公司的开发人员接口返回的较为复杂的JSON数据进行解析学习,优酷开发人员平台就非常不错。
另一点要注意就是读取JSON格式的数据前提是你要知道数据的键以及总体格式,否则你可能就仅仅能通过转换为字符串再通过各种复杂的推断(包含“:”,“{}”,“[]”等分隔符推断)来得到当中的数据。

3. Android读取JSON数据

接下操作以读取及解析存放在assets文件夹下的test.json为例,若是涉及到应用程序本地包内的JSON文件或者是SD卡内的JSON文件,实际上就是多添加了一步通过构造FileInputStream对象打开对应文件的步骤,而在assets文件夹下的json文件则能够通过Android的官方提供的操作方法getAssets().open("test.json")直接得到一个FileInputStream对象。
之后我们再通过构造InputStreamReader得到文件字符流对象,接着通过构造BufferedReader得到一个可以高效读取的缓冲流对象,就行讲JSON数据输出成为字符串了。
最后我们能够先将JSON数据存放在一个字符串中,然后通过Android内置的JSONObject、JSONArray类对数据进行解析。
关于各种输入流的不同能够參考:
http://blog.csdn.net/moxie008/article/details/5663488

以下是详细的Android操作代码:

try {
            InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("test.json"), "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String line;
            StringBuilder stringBuilder = new StringBuilder();
            while((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line);
            }
            bufferedReader.close();
            inputStreamReader.close();
            JSONObject jsonObject = new JSONObject(stringBuilder.toString());
            Log.i("TESTJSON", "cat=" + jsonObject.getString("cat"));
            JSONArray jsonArray = jsonObject.getJSONArray("language");
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject object = jsonArray.getJSONObject(i);
                Log.i("TESTJSON", "----------------");
                Log.i("TESTJSON", "id=" + object.getInt("id"));
                Log.i("TESTJSON", "name=" + object.getString("name"));
                Log.i("TESTJSON", "ide=" + object.getString("ide"));
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

主要思路就是通过构造JSONObject对象,然后通过getString()、getInt()、getJSONArray()、getJSONObject()等函数来进行数据获取,实现起来十分简单。

免责声明:文章转载自《Android读取JSON格式数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UE4_攻击伤害2_AI受击动画Tweepy1_抓取Twitter数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

json与String的转化

String转成jsonObject    JsonObject   json = JsonObject.fromObject(String str) String转成JsonArray      JsonArray jsonArray = JsonArray.fromObject(String str) 在开发过程中,经常需要和别的系统交换数据,数据交换...

android环境下的即时通讯

首先了解一下即时通信的概念。通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯。消息通道可由TCP/IP UDP实现。通俗讲就是把一个人要发送给另外一个人的消息对象(文字,音视频,文件)通过消息通道(C/S实时通信)进行传输的服务。即时通讯应该包括四种形式,在线直传、在线代理、离线代理、离线扩展。在...

状态通知栏

在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等。 下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件...

android 开发 实现一个自定义布局的AlertDialog对话框

   对话框有很多实现方法,最常见的是在一个点击事件中代码直接写出对话框。如下: package com.example.lenovo.mydemo2; import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.sup...

SensorManager

光照传感器 Android 中每个传感器的用法其实都比较类似,真的可以说是一通百通了。首先第一步要获取到 SensorManager 的实例 [html] view plain copy SensorManager senserManager = (SensorManager)   getSystemService(Conte...

Android 依赖注入: Dagger 2 实例解说(一)

本文原创,转载请注明出处:http://blog.csdn.net/zjbpku [Duplicated]   link to  Dagger on Android - Dagger2具体解释 关于Dagger,在之前的博文(Android 依赖注入:Dagger 实例解说(Demo下载))中已有介绍, 本文说的Dagger 2主要是由Google技术...