① 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();
}