Android笔记(五十) Android中的JSON数据
JSON是什么:
JSON是轻量级的文本数据交换格式
JSON独立于语言和平台
JSON具有自我描述性,更容易理解
JSON语法:
数据在名称/值对中
数据由逗号分割
大括号表示对象
中括号表示数组
JSON使用:
MainActivity.java
package cn.lixyz.jsontest.activity; import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import cn.lixyz.jsontest.R; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); } public void clickButton(View v) {
switch (v.getId()) {
case R.id.bt_readjson:
readJson();
break;
case R.id.bt_writejson:
writeJson();
break;
}
} // 往sdcard中写入文件
private void writeJson() { // 创建一个json对象
JSONObject root = new JSONObject();
try {
// 使用put(kay,value)插入元素
root.put("class", "三年二班");
// 常见若干对象,用以加入数组
JSONObject student1 = new JSONObject();
student1.put("id", 1);
student1.put("name", "张三");
student1.put("age", 10);
JSONObject student2 = new JSONObject();
student2.put("id", 2);
student2.put("name", "李四");
student2.put("age", 11);
JSONObject student3 = new JSONObject();
student3.put("id", 3);
student3.put("name", "王五");
student3.put("age", 13);
JSONObject student4 = new JSONObject();
student4.put("id", 4);
student4.put("name", "赵六");
student4.put("age", 14);
JSONObject student5 = new JSONObject();
student5.put("id", 5);
student5.put("name", "孙七");
student5.put("age", 15);
JSONObject student6 = new JSONObject();
student6.put("id", 6);
student6.put("name", "刘八");
student6.put("age", 16);
// 创建一个json数组
JSONArray array = new JSONArray();
// 将之前创建的json对象添加进来
array.put(student1);
array.put(student2);
array.put(student3);
array.put(student4);
array.put(student5);
array.put(student6); // 将json数组添加
root.put("student", array);
Log.d("TTTT", array.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} String packageName = this.getPackageName();
String jsonFileName = "json.json";
String sdCardPath = Environment.getExternalStorageDirectory().toString(); File sdCardPackagePath = new File(sdCardPath + "/" + packageName);
if (!sdCardPackagePath.exists()) {
if (sdCardPackagePath.mkdir()) {
Log.d("TTTT", "创建目录成功");
} else {
Log.d("TTTT", "创建目录不成功"); } } File jsonFile = new File(sdCardPackagePath + "/" + jsonFileName);
if (!jsonFile.exists()) {
try {
if (jsonFile.createNewFile()) {
Log.d("TTTT", "创建文件成功");
} else {
Log.d("TTTT", "创建文件失败"); } } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} try {
// 将json数据写入文件
FileWriter fileWriter = new FileWriter(jsonFile);
fileWriter.write(root.toString());
fileWriter.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // 读取assets目录中的json文件
private void readJson() {
try {
// 读取assets目录下的json文件
InputStreamReader isr = new InputStreamReader(getAssets().open("test.json"), "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
StringBuilder builder = new StringBuilder();
while ((line = br.readLine()) != null) {
builder.append(line);
}
br.close();
// 获取到json文件中的对象
JSONObject root = new JSONObject(builder.toString());
// 使用getString(key)方式获取value
Log.d("TTTT", "class=" + root.getString("class"));
// 获取json数组
JSONArray array = root.getJSONArray("student");
for (int i = 0; i < array.length(); i++) {
JSONObject student = array.getJSONObject(i);
Log.d("TTTT", "id=" + student.getInt("id") + ",name=" + student.getString("name") + ",age="
+ student.getInt("age"));
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cn.lixyz.jsontest.activity.MainActivity" > <Button
android:id="@+id/bt_writejson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="clickButton"
android:text="@string/writejson" /> <Button
android:id="@+id/bt_readjson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="clickButton"
android:text="@string/readjson" /> </LinearLayout>
/assets/test.json
{
"student":[
{"id":1,"name":"张三","age":10},
{"id":2,"name":"李四","age":11},
{"id":3,"name":"王五","age":12},
{"id":4,"name":"赵六","age":13},
{"id":5,"name":"孙七","age":14},
{"id":6,"name":"刘八","age":15},
],
"class":"三年二班"
}
Android笔记(五十) Android中的JSON数据的更多相关文章
- Android(java)学习笔记208:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- Android(java)学习笔记151:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- 截取HTML中的JSON数据并利用GSON进行解析(Android)
截取HTML中的JSON数据并利用GSON进行解析(Android) 前言 最近在做的一个Android项目,需要自行搭建服务器,队友选择买了阿里云的服务器ESC产品,在数据获取上,我们采用了Andr ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- 关于mysql中存储json数据的读取问题
在mysql中存储json数据,字段类型用text,java实体中用String接受. 返回前端时(我这里返回前端的是一个map),为了保证读取出的数据排序错乱问题,定义Map时要用LinkedHas ...
- JMeter 中对于Json数据的处理方法
JMeter中对于Json数据的处理方法 http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/ J ...
- java读取url中json文件中的json数据
有时候需要远程从其他接口中获取json数据,如果遇到返回的json数据是一个文件而不直接是数据,那么可以通过以下方法进行读取: /** * 从数据接口获取到数据 * @return * @throws ...
- vue中引入json数据,不用本地请求
1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...
- ASP.NET Core中返回 json 数据首字母大小写问题
ASP.NET Core中返回 json 数据首字母大小写问题 在asp.net core中使用ajax请求动态绑定数据时遇到该问题 后台返回数据字段首字母为定义的大写,返回的数据没有问题 但是在前台 ...
随机推荐
- Chrome DevTools 之 Network,网络加载分析利器
链接:https://www.jianshu.com/p/471950517b07 虽然一直在用Chrome DevTools,但大多停留在常用的功能和调试上,比如Elements/Network/S ...
- [译]如何取消本地的git commit提交?
git reset HEAD~1 原文来源:https://stackoverflow.com/questions/4850717/how-to-cancel-a-local-git-commit
- CentOS离线状态下安装Python3.7.0
1.下载python安装包以及依赖的包 python安装包:Python-3.7.0 下载地址:www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz ...
- (二)limit的高级用法
一.取出前n条数据 ; 二.取出第几行到第几行的数据 ,; 解释:取出从第3行(从0行开始)开始的5条记录.
- 【VS开发】WaitForSingleObject 和 WaitForMultipleObjects函数 (让线程挂起等待事件)
WaitForSingleObject 和 WaitForMultipleObjects:1.WaitForSingleObject 等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通 ...
- 【神经网络与深度学习】【计算机视觉】SPPNet-引入空间金字塔池化改进RCNN
转自: https://zhuanlan.zhihu.com/p/24774302?refer=xiaoleimlnote 继续总结一下RCNN系列.上篇RCNN- 将CNN引入目标检测的开山之作 介 ...
- 使用clion+cmake+vcpkg的开发现代的c++跨平台程序
使用clion+cmake+vcpkg的开发现代的c++跨平台程序 使用c++开发跨平台的程序 背景 在开发过程中,使用c++作为开发语言,通常被认为是痛苦的,啰嗦的,超长开发时间的.最近几年有各种各 ...
- mysql查询列为空
SELECT * FROM `表名` WHERE ISNULL(列名)
- ubuntu12下安装unixODBC(mysql)
转自:https://blog.51cto.com/dreamylights/1321678 1. 需要的包 unixODBC源码包unixODBC-2.2.14.tar.gz mysql 驱动 my ...
- Spring的并发问题——有状态Bean和无状态Bean
一.有状态和无状态 有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每 ...