原生JSON解析
原生JSON解析
JSONObject:JSON数据封装对象
JSONArray:JSON数据封装数组
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="net.bwie.jsonobject.MainActivity"> <Button
android:id="@+id/read_file_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取文件中的json数据"/> <Button
android:id="@+id/parse_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="解析json数据"/> <TextView
android:id="@+id/result_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/> </LinearLayout>
Bean:
package net.bwie.jsonobject; import java.util.List; public class ShoppingBean { private String msg;
private InfoBean info; public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public InfoBean getInfo() {
return info;
} public void setInfo(InfoBean info) {
this.info = info;
} @Override
public String toString() {
return "ShoppingBean{" +
"msg='" + msg + '\'' +
", info=" + info +
'}';
} public static class InfoBean { private int cat_id;
private List<GoodsBean> good;
private boolean url; public int getCat_id() {
return cat_id;
} public void setCat_id(int cat_id) {
this.cat_id = cat_id;
} public List<GoodsBean> getGood() {
return good;
} public void setGood(List<GoodsBean> good) {
this.good = good;
} public boolean isUrl() {
return url;
} public void setUrl(boolean url) {
this.url = url;
} @Override
public String toString() {
return "InfoBean{" +
"cat_id=" + cat_id +
", good=" + good +
", url=" + url +
'}';
} public static class GoodsBean { private long add_time;
private String colorcode;
private String currency_price;
private String description;
private String goods_id;
private String goods_name;
private String thumb; public long getAdd_time() {
return add_time;
} public void setAdd_time(long add_time) {
this.add_time = add_time;
} public String getColorcode() {
return colorcode;
} public void setColorcode(String colorcode) {
this.colorcode = colorcode;
} public String getCurrency_price() {
return currency_price;
} public void setCurrency_price(String currency_price) {
this.currency_price = currency_price;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public String getGoods_id() {
return goods_id;
} public void setGoods_id(String goods_id) {
this.goods_id = goods_id;
} public String getGoods_name() {
return goods_name;
} public void setGoods_name(String goods_name) {
this.goods_name = goods_name;
} public String getThumb() {
return thumb;
} public void setThumb(String thumb) {
this.thumb = thumb;
} @Override
public String toString() {
return "GoodsBean{" +
"add_time=" + add_time +
", colorcode='" + colorcode + '\'' +
", currency_price='" + currency_price + '\'' +
", description='" + description + '\'' +
", goods_id='" + goods_id + '\'' +
", goods_name='" + goods_name + '\'' +
", thumb='" + thumb + '\'' +
'}';
}
} } }
Activity:
/**
* 1、将json文件存在外部存储中,使用IO流读取文件中的数据
* 2、使用JSONObject解析读取出来的数据
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private String mJson = ""; protected Button mReadFileBtn;
protected Button mParseBtn;
protected TextView mResultTv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
initView();
} @Override
public void onClick(View view) {
if (view.getId() == R.id.read_file_btn) {
readFile();
} else if (view.getId() == R.id.parse_btn) {
ShoppingBean shopping = parseJson();
Log.d("1507", "" + shopping);
}
} // 解析JSON数据
// 遇到{}就创建JSONObject,遇到[]就创建JSONArray
private ShoppingBean parseJson() {
ShoppingBean shopping = null;
try {
JSONObject rootObject = new JSONObject(mJson);
shopping = new ShoppingBean(); String msg = rootObject.getString("msg");
shopping.setMsg(msg); JSONObject infoObject = rootObject.getJSONObject("info");
ShoppingBean.InfoBean info = new ShoppingBean.InfoBean();
shopping.setInfo(info); int catId = infoObject.getInt("cat_id");
info.setCat_id(catId); boolean url = infoObject.getBoolean("url");
info.setUrl(url); JSONArray goodsArray = infoObject.getJSONArray("goods");
List<ShoppingBean.InfoBean.GoodsBean> goodsList = new ArrayList<>();
info.setGood(goodsList); for (int i = 0; i < goodsArray.length(); i++) {
JSONObject goodsObject = goodsArray.getJSONObject(i);
ShoppingBean.InfoBean.GoodsBean goods = new ShoppingBean.InfoBean.GoodsBean(); long addTime = goodsObject.getLong("add_time");
goods.setAdd_time(addTime); String colorCode = goodsObject.getString("colorcode");
goods.setColorcode(colorCode); String currencyPrice = goodsObject.getString("currency_price");
goods.setCurrency_price(currencyPrice); String description = goodsObject.getString("description");
goods.setDescription(description); String goodsName = goodsObject.getString("goods_name");
goods.setGoods_name(goodsName); String thumb = goodsObject.getString("thumb");
goods.setThumb(thumb); goodsList.add(goods);
} } catch (Exception e) {
e.printStackTrace();
} return shopping; } // 读取文件中的JSON数据
private void readFile() {
// 根目录
// Environment.getExternalStorageDirectory() // 外部存储公共路径,例如:DCIM,DOWNLOADS等系统提供的文件夹
// Environment.getExternalStoragePublicDirectory(类型) // 外部存储私有路径:Android文件夹
// context.getExternalFilesDir(null) // downloads文件夹路径
String filePath = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
.getAbsolutePath();
String fileName = "json.txt"; File file = new File(filePath, fileName); // 文件字符输入流
// 字缓符输入冲流
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = new String();
while ((line = br.readLine()) != null) {
mJson += line;
}
if (mJson != null) {
mResultTv.setText(mJson);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} private void initView() {
mReadFileBtn = (Button) findViewById(R.id.read_file_btn);
mReadFileBtn.setOnClickListener(MainActivity.this);
mParseBtn = (Button) findViewById(R.id.parse_btn);
mParseBtn.setOnClickListener(MainActivity.this);
mResultTv = (TextView) findViewById(R.id.result_tv);
}
}
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
原生JSON解析的更多相关文章
- .Net Core 3.0原生Json解析器
微软官方博客中描述了为什么构造了全新的Json解析器而不是继续使用行业准则Json.Net 微软博客地址:https://devblogs.microsoft.com/dotnet/try-the-n ...
- iOS原生JSON解析.
- (IBAction)accessInterfaceBtnPressed:(id)sender { NSError *error; NSString *URL=@"ht ...
- iOS SDK原生JSON解析
- (IBAction)touchReadButton:(id)sender { NSData *jsonData = [[NSData alloc] initWithContentsOfFile:J ...
- iOS中JSON解析三方库的比较
网络数据解析框架 1. JsonModel 一个 JSON 模型转换库,有着比较简洁的接口.Model 需要继承自 JSONModel. 2. yyModel yyModel比较轻量(算上.h 只 ...
- ios基础篇(二十七)—— Json解析
一.什么是Json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...
- IOS中Json解析的四种方法
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...
- JSON解析方案
在iOS中,JSON的常见解析方案有4种 第三方框架:JSONKit,SBJson,TouchJSON(性能从左到右,越差) 苹果原生(自带):NSJSONSerialization(性能最好) JS ...
- iOS开发之网络数据解析(一)--JSON解析简介
前言:对服务器请求之后,返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 本篇随便先讲解JSON解析. 正文: 关于JSON: JSON是一种轻量级的数据格式,一般用于数据交互 ...
- Android开源库--Gson谷歌官方json解析库
官方文档地址:http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html 官方网站:http://code.go ...
随机推荐
- FastDFS高可用集群架构配置搭建
一.基本模块及高可用架构 FastDFS 是余庆老师开发的一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡. FastDFS 系统有 ...
- [Umbraco] 创建第一个页面
如何创建一个页面,很简单. 进入settings,首先右键点击“Document Types”, 在出现的菜单点击"Create",在弹出的窗口中 Master Document ...
- [转]Use HandleBars in Express
http://fraserxu.me/posts/Using-Handlebarsjs-with-Expressjs/ 在Express项目中使用Handlebars模板引擎 31 Aug 2014 ...
- odoo开发笔记 -- 视图继承扩展
参考: http://www.jeffzhang.cn/Odoo-Notes-2/ http://blog.csdn.net/zhangfeng1133/article/details/4693517 ...
- 计算机网络 之 TCP和UDP的端口号解析
前言:今天了解一下tcp和udp报文的端口.发现一直以来都只是知道端口用于区分同一IP的服务器的不同服务,已经端口的大小.在查找traceroute的资料的时候,才了解到一些之前没注意到的东西. (一 ...
- setAttribute()、getAttribute()与ele[attr]与自定义属性
一.自定义属性设置 1.setAttrbute() var q=document.getElementById("q"); q.setAttribute("index&q ...
- Android开发艺术探索学习笔记(一)
第一章 Activity的生命周期和启动模式 1.1Activity的生命周期全面解析 1.1.1典型情况下的生命周期分析 (1)在两个Activity进行切换时,当前的Activity的onPaus ...
- Nginx缓存配置之手动清除缓存
访问我的博客 前言 前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天. 但是如果前端修改了页面,比如首页,由于 Nginx 缓存的 ...
- 让IIS Express 也支持外部链接
- Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架
本文是关于 Newbe.Claptrap 项目主体内容的介绍,读者可以通过这篇文章,大体了解项目内容. 轮子源于需求 随着互联网应用的蓬勃发展,相关的技术理论和实现手段也在被不断创造出来.诸如 “云原 ...