在Android中使用自带API操作Json

Json简介

  • JavaScript对象表示法(JavaScript Object Notation)
  • 是存储和交换文本信息的语法
  • 特点
    1. 是轻量级的文本数据交换格式
    2. 独立于语言和平台
    3. 具有自我描述性,更易理解

Json与XML

  • 类似XML,比XML更小、更快、更易解析
  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 使用数组
  • 不使用保留字

Json语法

  • 是JavaScript对象表示法语法的子集

    • 数组在键值对中
    • 数据由逗号分隔
    • 大括号保存对象
    • 中括号保存数组
  • Json值可以是
    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true或false)
    • 数组
    • 对象
    • null

Json对象

  • 在大括号中书写,可以包含多个键值对,如

    {"firstName":"John", "lastName":"Doe"}

Json数组

  • 在中括号中书写,可以包含多个对象,通过逗号分隔

    {
        "employees":[
            {"firstName":"John", "lastName":"Doe"},
            {"firstName":"Anna", "lastName":"Smith"},
            {"firstName":"Peter", "lastName":"Jones"}
        ]
    }

在Android中读取Json数据

  1. 准备数据test.json

    {
        "languages":[
            {"id":1, "ide":"Eclipse", "name":"Java"},
            {"id":2, "ide":"XCode", "name":"Swift"},
            {"id":3, "ide":"Visual Sutdio", "name":"C#"}
        ],
        "cat":"it"
    }
  2. 将test.json复制到项目的assets目录中
  3. 将test.json中的内容读取到一个字符串中
    StringBuilder sBuilder = new StringBuilder();
    
    try {
        InputStreamReader isr = new InputStreamReader(getAssets().open("test.json"), "UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null) {
            sBuilder.append(line);
        }
        br.close();
        isr.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  4. 解析并显示Json数据
    try {
        JSONObject root = new JSONObject(sBuilder.toString());
        Log.d("Tag", "cat=" + root.getString("cat"));
        JSONArray array = root.getJSONArray("languages");
        for (int i = 0; i < array.length(); i++) {
            JSONObject lan = array.getJSONObject(i);
            Log.d("Tag", "---------------------------------");
            Log.d("Tag", "id=" + lan.getInt("id")); //注意get方法要与json中实际数据类型一致
            Log.d("Tag", "ide=" + lan.getString("ide"));
            Log.d("Tag", "name=" + lan.getString("name"));
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
  5. 在Logcat中查看结果

    

在Android中创建Json格式数据

  1. 需求:创建和上一个小节中test.json完全一致的数据
  2. 代码如下
    try {
        JSONObject root = new JSONObject();
        //1. 创建cat属性并赋值
        root.put("cat", "it");
    
        //2. 创建数组中的对象
        //{"id":1, "ide":"Eclipse", "name":"Java"}
        JSONObject lan1 = new JSONObject();
        lan1.put("id", 1);
        lan1.put("ide", "Eclipse");
        lan1.put("name", "Java");
    
        //{"id":2, "ide":"XCode", "name":"Swift"}
        JSONObject lan2 = new JSONObject();
        lan2.put("id", 2);
        lan2.put("ide", "XCode");
        lan2.put("name", "Swift");
    
        //{"id":3, "ide":"Visual Sutdio", "name":"C#"}
        JSONObject lan3 = new JSONObject();
        lan3.put("id", 3);
        lan3.put("ide", "Visual Sutdio");
        lan3.put("name", "C#");
    
        //3. 将对象放入数组中
        JSONArray array = new JSONArray();
        array.put(lan1);
        array.put(lan2);
        array.put(lan3);
    
        //将数组添置到root中
        root.put("languages", array);
    
        Log.d("Tag", root.toString());
    } catch (JSONException e) {
        e.printStackTrace();
    }
  3. 在Logcat中查看结果

    

时间: 2024-08-19 05:12:53

在Android中使用自带API操作Json的相关文章

python 中调用windows系统api操作剪贴版

# -*- coding: utf-8 -*- ''' Created on 2013-11-26 @author: Chengshaoling ''' import win32clipboard as w32 import win32con class OperateClipboard(object): def __init__(self): # print "OperateClipboard" pass def getText(self): w32.OpenClipboard()

STM32中的位带(bit-band)操作(转)

源:STM32中的位带(bit-band)操作 支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写.在 CM3 中,有两个区中实现了位带.其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB范围.这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字.当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的.       位带操作的概念其实 30 年前就有了,那还是805

Android中使用系统提供API数据访问接口操作数据库

数据的增加 1.创建一个SQLite数据的帮助类 SQLiteDatabase db = helper.getWritableDatabase(); 2.创建一个类似map集合的类ContentValues,用来存储键值对 ContentValues values = new ContentValues(); 3.把需要增加的数据存放进去 values.put("name", name); values.put("number", number); 4.执行系统提供

(转)Android中系统自带的锁:WalkLock、KeyguardLock

Android系统自带了两把锁: (1)WalkLock:唤醒锁,点亮屏幕用的 ; (2)KeyguardLock:键盘锁,解锁键盘用的; WalkLock 唤醒锁 (1)WalkLock真的能点亮屏幕吗? 答案是肯定的,可是有时候为什么不点亮屏幕,这个就是参数设置的问题了. PowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Gank"); PowerM

STM32中的位带(bit-band)操作

支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写.在 CM3 中,有两个区中实现了位带.其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB范围.这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的"位带别名区",位带别名区把每个比特膨胀成一个 32 位的字.当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的.       位带操作的概念其实 30 年前就有了,那还是8051 单片机开创的先河,如今,CM3 将

Android中添加和识别手势操作

实现思路:将手势写入GestureLibrary中,对其他手势进行匹配对比,进行识别 先在布局中加入GestureOverlayView组件 <android.gesture.GestureOverlayView android:id="@+id/add_gesture" android:layout_width="match_parent" android:layout_height="match_parent" android:layo

android中sql关于时间的操作

sql 中有时间的类型,date,time,datetime,方便关于记录的维护,下面一个demo演示怎么在每条记录中默认增加时间 源码下载地址 http://www.codes51.com/code/detail_1460.html 1.先是databasehelper类,这里建表保存一本书,包括书名,作者. package com.chaoyue.sqldemo; import android.content.ContentValues; import android.content.Con

java1.7与Android中的文件I/O操作(草稿)

说明:文件I/O的关键类比较多,这里总结一下. 参考:<Java 7 入门经典> 1.Java输入流 图1,java常用输入输出流的结构图(第一版) 1)标准流 标准流 类型 方法 System.in InputStream System.out PrintStream 例如:printf("b=%2$-15.2f",a,b) System.err 2)字节型 典型方式-1:从文件中读取 File file = ... InputStream in = null; try

Android中CleanEditText自动带X号输入框的EditText

图标在这里.你懂得 实现的效果如下: 今天做项目遇到的问题.记录下.自动带删除按钮的EditText. public class CleanEditText extends EditText implements OnFocusChangeListener, TextWatcher { /** * 删除按钮的引用 */ private Drawable mClearDrawable; public CleanEditText(Context context) { this(context, nu