① android 中解析 JSON
JSON( javaScript Object Notation ) 是一种轻量级的数据交换格式。易于阅读和编写,同时也易于机器解析和生成。
JSON 建构于两种结构:
JSON 具有以下这些格式:
参考: Android 中 解析 JSON
Android 提供类四种不同的类来操作 JSON 数据。这些类是 JSONArray、JSONObject、JSONStringer 和 JSONTokenizer
为了解析 JSON 对象,须先创建一个 JSONObject 类的对象,需要传入需解析的字符串 JSONObject root = new JSONObject(candyJson); 然后根据 JSONObject 对象提供方法以及数据类型解析对应 json 数据。下表展示一些 JSONObiect 提供的方法
示例:
② Android 如何引用本地json文件
有时候遇到要一些模拟数据的时候,要么写个List<T>,要么写死.
然后数据比较多的时候可以引用本地资源文件,记录下如何使用本地json文件
<1>在java同级目录下创建"assets"资源文件夹
<2>编辑json文本内容
至于json文件夹内容 就自定义了,想要什么内容写什么,对于一个做项目多了的开发者而言 json数据是熟悉到不能再熟悉的了
以下是我在淘宝一个个复制过来自己拼装的一些商品数据
不需要加任何标识,只需要标准的json数据格式就可以了
<3>引用和json解析的工具类,解析用的 Gson也是经常用到的
<4>最后在需要的地方引用,"ExchangeBean"是根据json内容写的一个模型,用于接收存放数据
有时间再补上demo,下面是效果图:
③ android使用JSON遇到的坑(1)
最近在开发的过程中遇到一个问题,服务端返回了一个JSON对象,在用JSON库解析的时候出现了一个诡异的问题
服务端返回的原始JSON是
在程序中直接调用JSON中的方法
打印的日志如下
通过JSON的方法取到的结果出现了不一致的情况。应该是转换的时候精度出现了损失,一步一步跟到内部的实现方法,先看optLong()
这里调用了两个参数的optLong()方法,在不传默认值的时候如果出错的话这个方法会返回0。再往里跟,这个方法内部调用了JSON.toLong()方法。
接着向里面走
看来问题是出在这里了,当输入的参数为String的时候,toLong()方法会使用Double.parseDouble()方法解析,而我们知道double的精度是会有损失的,在 Google的文档 上有这么一句话
在取非常大的数字的时候,会先转换成String,再通过parseDouble()方法转成long,这期间就造成了精度损失。
先得到String类型的值,再将String转成long
这样就可以正确的取到值了,Long.valueOf()内部实现调用了BigInteger中的方法,这样就能保证结果正确了。
④ 跪求 一个Android 读取SD卡里的 json 文件的解析,要完整代码
{
privatestaticfinalStringPATH=Environment.getExternalStorageDirectory()+"/123.json";
privateandroid.widget.TextViewjsonTv;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.jsonTv=(TextView)findViewById(R.id.jsonTv);
newThread(){
@Override
publicvoidrun(){
Messagemsg=handler.obtainMessage();
msg.obj=getFileFromSD(PATH);
msg.what=1;
handler.sendMessage(msg);
}
}.start();
}
privateHandlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
if(msg.what==1){
Stringresult=(String)msg.obj;
try{
JSONObjectjObj=newJSONObject(result);
jsonTv.setText("name:"+jObj.getString("name")+",age:"+jObj.getInt("age"));
}catch(JSONExceptione){
e.printStackTrace();
}
}
}
};
privateStringgetFileFromSD(Stringpath){
Stringresult="";
try{
FileInputStreamf=newFileInputStream(path);
BufferedReaderbis=newBufferedReader(newInputStreamReader(f));
Stringline="";
while((line=bis.readLine())!=null){
result+=line;
}
}catch(Exceptione){
e.printStackTrace();
}
returnresult;
}
}
<RelativeLayoutxmlns:android="
xmlns:tools="
android:layout_width="match_parent"
android:layout_height="match_parent"
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=".MainActivity">
<TextView
android:id="@+id/jsonTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
最后,记得在AndroidMenifest文件中加入权限
<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
123.json的内容
{"name":"rock","age":20}
⑤ android中解析json数据的org.json包中最重要
android中解析json数据的org.json包中最重要的是jsonarray。
jsonarray主要是解析json数据,因此四最重要的。
Android是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑。
⑥ Android读取本地json文件的方法
本文实例讲述了Android读取本地json文件的方法。分享给大家供大家参考,具体如下:
1、读取本地JSON ,但是显示汉字乱码
public static String readLocalJson(Context context, String fileName){ String jsonString=""; String resultString=""; try { BufferedReader bufferedReader=new BufferedReader(new InputStreamReader( context.getResources().getAssets().open(fileName))); while ((jsonString=bufferedReader.readLine())!=null) { resultString+=jsonString; } } catch (Exception e) { // TODO: handle exception } return resultString;}
2、读取本地JSON,显示汉字正确,txt文件设置时UTF-8,UNIX
public static String readLocalJson(Context context, String fileName){ String jsonString=""; String resultString=""; try { InputStream inputStream=context.getResources().getAssets().open(fileName); byte[] buffer=new byte[inputStream.available()]; inputStream.read(buffer); resultString=new String(buffer,"GB2312"); } catch (Exception e) { // TODO: handle exception } return resultString;}
⑦ 利用Github保存json文件在Android端接收使用
1.自己注册好GitHub,创建仓库等等。
2.新建一个文本文件,输入要保存的数据,比如
然后保存,然后修改后缀名,其它后缀名应该也可以,我这里修改为.js文件
3.用Git该文件提交到GitHub,比如我的提交到HdyLove/Json/article.js,然后输入地址类似 https://qiusunshine.github.io/HdyLove/Json/article.js 即可访问相应的地址,具体用户名,仓库名修改为自己的就可以了。
我是使用Volley+Glide使用的,Volley的JsonObjectRequest可以将该网址内容解析为json格式,用AndroidStudio自带的Json处理方法即可处理
⑧ android 用JSON 解析数据接口方法
接口获取下来的数据为
{"status":200,"message":"查询成功","data":{"id":32,"user_id":null,"user_code":null,"user_pass":null,"meeting_id":"1","meeting_pass":null,"config_param_ip":"11.1.1.70","port":"6501","web_config_param_ip":"11.1.1.70","web_port":"6501","unit_code":null,"create_time":null,"update_time":null,"status":0,"userCode":"video1","userPass":"video1","meetingId":"1","meetingPass":"","apiPort":"13000","username":"admin","password":"123456","updateTime":"2021-11-08 17:45:29"}}
使用方法
try {
JSONObject jsonObject = new JSONObject(outstring);
int resultCode = jsonObject.getInt("status");
if (resultCode == 200) {
JSONObject obj = jsonObject.getJSONObject("data");
IP = obj.getString("config_param_ip");
port = obj.getString("web_port");
username = obj.getString("userCode");
password = obj.getString("userPass");
roomID = Integer.parseInt(obj.getString("meetingId"));
roomPassword = obj.getString("password");
} else {
ToastUtils.showShort("查询失败");
}
goVideo();
} catch (Exception e) {
e.printStackTrace();
}