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请求动态绑定数据时遇到该问题 后台返回数据字段首字母为定义的大写,返回的数据没有问题 但是在前台 ...
随机推荐
- visual studio(vs)初始化
cmd 进入到 devenv.exe 所在目录 执行一下命令 devenv.exe /setup /resetuserdata /resetsettings
- Qt编写控件属性设计器11-导入xml
一.前言 上一篇文章负责把设计好的控件数据导出到了xml文件,本偏文章负责把导出的xml数据文件导入,然后在画布上自动生成对应的控件,Qt内置的xml数据解析功能,非常强大,都封装在QtXml组件中, ...
- ajax中参数traditional的作用
在使用ajax向后台传值的时候,有的时 $.ajax({ type: "post", async: true, data: { "records": [&quo ...
- 淡sqlserver对like '%关键词%' 处理时的索引利用问题
说法一:百分号%通配符前置会让SQL查询不走索引,改走全表扫描.这种说法很流行 结论是错误的 事实上这种说法不太准确 通配符%前置会让SQL查找索引时效率极速下降,但在大多数情况下还是会走索引(不需要 ...
- 【神经网络与深度学习】Win10+VS2015 caffe环境搭建(极其详细)
caffe是好用,可是配置其环境实在是太痛苦了,依赖的库很多不说,在VS上编译还各种报错,你能想象那种被一百多个红色提示所笼罩的恐惧. 且网上很多教程是VS2013环境下编译的,问人很多也说让我把1 ...
- webpack打包时候去掉console.log配置
new UglifyJsPlugin({ uglifyOptions: { compress: { warnings: false, drop_console: true,//console pure ...
- 1206 雅礼集训D2题解
A \(two\) \(1.1\) \(Description\) 你有两棵有根树,每棵各有 n 个顶点.让我们用整数 1 到 n 给每棵树的顶点编 号.两棵树的根都是顶点 1.第一棵树的边都都是蓝色 ...
- 了解一下JVM和GC工作机制
题外话:很久没有写博客了,事情颇多,今天空闲下来,学习一下顺便写一下自己的了解,机会总是留给有准备的人,所以平常一定要注意知识的巩固和积累.知识的深度也要有一定的理解,不比别人知道的多,公司干嘛选你? ...
- 腾讯的网站如何检测到你的 QQ 已经登录?
转:http://www.lovelucy.info/tencent-sso.html 在 QQ 已经登录的情况下,手动输入网址打开 QQ 邮箱 或者 QQ 空间 等腾讯网站,可以看到网页已经检测到本 ...
- KAFA优点和缺点
我们上一期的Kafka教程中,我们讨论了Kafka的Books.今天,我们将讨论卡夫卡的优势和劣势.因为,在使用之前了解任何技术的局限性非常重要,在优点的情况下也是如此.所以,让我们详细讨论卡夫卡优势 ...