当前位置:首页 » 安卓系统 » android读取json文件

android读取json文件

发布时间: 2023-08-17 20:46:50

‘壹’ android json解析三种方式哪种效率最高

用org.json以及谷歌提供gson来解析json数据的方式更好一些。

安卓下通常采用以下几种方式解析json数据:
1、org.json包(已经集成到android.jar中了)
2、google提供的gson库
3、阿里巴巴的fastjson库
4、json-lib

以Google出品的Gson为例,具体步骤为:
1、首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar 到libs(项目根目录新建一个libs文件夹)中。 可以使用以下两种方法解析JSON数据,通过获取JsonReader对象解析JSON数据。
代码如下:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
2、使用Gson对象获取User对象数据进行相应的操作:
代码如下:

Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
3、如果要处理的JSON字符串只包含一个JSON对象,则可以直接使用fromJson获取一个User对象:
代码如下:

String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());

‘贰’ Android 解析json问题

java">///http地址
StringhttpUrl=ip+":"+端口号+"/loginbyandroid/validate.do";
//HttpPost连接对象
HttpPosthttpRequest=newHttpPost(httpUrl);
//使用NameValuePair来保存要传递的Post参数
List<NameValuePair>params=newArrayList<NameValuePair>();
//添加要传递的参数
params.add(newBasicNameValuePair("loginId","value"));
params.add(newBasicNameValuePair("password","value"));
//设置字符集
HttpEntityhttpentity;
try{
httpentity=newUrlEncodedFormEntity(params,"utf-8");

//请求httpRequest
httpRequest.setEntity(httpentity);
//取得默认的HttpClient
HttpClienthttpclient=newDefaultHttpClient();
//取得HttpResponse
HttpResponsehttpResponse;
httpResponse=httpclient.execute(httpRequest);
//HttpStatus.SC_OK表示连接成功
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//取得返回的字符串
StringstrResult=EntityUtils.toString(httpResponse
.getEntity());
JSONArrayjsonArray=newJSONArray(strResult);
for(inti=0;i<jsonArray.length();i++){
JSONObjectjsonObject=(JSONObject)jsonArray.opt(i);
Stringsuccess=jsonObject.getString("success");
StringJSESSIONID=jsonObject.getString("JSESSIONID");
StringloginName=jsonObject.getString("loginName");
Stringorgname=jsonObject.getString("orgname");
System.out.println("success="+success
+"JSESSIONID="+JSESSIONID+"loginName="
+loginName+"orgname="+orgname);
}
}else{
System.out.println("请求错误!");
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}

‘叁’ 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怎么遍历jsonobject

android 读取json数据(遍历JSONObject和JSONArray)
•public String getJson(){

• String jsonString = "{\"FLAG\":\"flag\",\"MESSAGE\":\"SUCCESS\",\"name\":[{\"name\":\"jack\"},{\"name\":\"lucy\"}]}";//json字符串
• try {
• JSONObject result = new JSONObject(jsonstring);//转换为JSONObject
• int num = result.length();
• JSONArray nameList = result.getJSONArray("name");//获取JSONArray
• int length = nameList.length();
• String aa = "";
• for(int i = 0; i < length; i++){//遍历JSONArray
• Log.d("debugTest",Integer.toString(i));
• JSONObject oj = nameList.getJSONObject(i);
• aa = aa + oj.getString("name")+"|";

• }
• Iterator<?> it = result.keys();
• String aa2 = "";
• String bb2 = null;
• while(it.hasNext()){//遍历JSONObject
• bb2 = (String) it.next().toString();
• aa2 = aa2 + result.getString(bb2);

• }
• return aa;
• } catch (JSONException e) {
• throw new RuntimeException(e);
• }
• }

‘伍’ android 读取网上JSON,数据重复,该怎么处理

重复就重复呗,对你程序又没任何影响,你实在不想重复你就这样写

class A()
{
String date;
String formatDate;
List<B> bList;

//实现他们的get,set方法
}

class B()
{
String time;
String title;
String type;
String url;
String keywords;
//实现他们的get,set方法
}

代码里这样写

A a = new A();
List<A> aList=new List<A>();
for (int i = 0; i < array.length; i++) {
JSONObject item=array.getJSonObject(i);
String Date=item.getString("date");
String formatDate=item.getString("formatDate");
a.setDate(Date);
a.setformatDate(formatDate);
JsonArray next=item.getJSONArray("list");
List<B> list = new ArrayList<B>();
for (int j = 0; j < next.length; j++) {
B b=new B();
b.setTime();
b.setType();
...
list.add(b);

}
a.setBList(list);
aList.add(a);
}

‘陆’ android加载assets中的json格式文件

assets资源目录一般用于存放html文件、数据库文件、javascript文件,assets目录下的文件不会在R.java自动生成ID,所以读取assets目录下的文件必须指定文件的路径

在代码中使用AssertManager获取文件的输入流读取

AssetManagerassetManager=context.getAssets();
try{
InputStreamis=assetManager.open("json.data");
BufferedReaderbr=newBufferedReader(newInputStreamReader(is));
StringBufferstringBuffer=newStringBuffer();
Stringstr=null;
while((str=br.readLine())!=null){
stringBuffer.append(str);
}

}catch(IOExceptione){
e.printStackTrace();
}


也可以把json文件放在res的raw目录下

res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;

但是需要注意的是assets允许有目录结构,而raw不行

读取方法大同小异

try{
InputStreamis=getResources().openRawResource(R.id.file);
BufferedReaderbr=newBufferedReader(newInputStreamReader(is));
StringBufferstringBuffer=newStringBuffer();
Stringstr=null;
while((str=br.readLine())!=null){
stringBuffer.append(str);
}

}catch(IOExceptione){
e.printStackTrace();
}

‘柒’ android怎么读取外部json文件

比如说读取sd卡里的
privatestaticStringSDCardPATH=Environment.getExternalStorageDirectory()+"/";

/**
*读取文本文件
*
*@paramfilePath
*@return
*/
(StringfilePath){
StringBuildersb=newStringBuilder();
try{
Filefile=newFile(SDCardPATH+filePath);
InputStreamin=null;
in=newFileInputStream(file);
inttempbyte;
while((tempbyte=in.read())!=-1){
sb.append((char)tempbyte);
}
in.close();
}catch(Exceptione){
e.printStackTrace();
}
returnsb.toString();
}


然后你就可以进行你的解析json了。

热点内容
国服没有脚本吗 发布:2025-03-13 02:52:57 浏览:702
机器人解压 发布:2025-03-13 02:52:18 浏览:954
怎么在服务器上部署网站 发布:2025-03-13 02:52:15 浏览:207
android弹出键盘布局 发布:2025-03-13 02:46:22 浏览:379
单耳安卓蓝牙耳机怎么使用教程 发布:2025-03-13 02:36:22 浏览:518
配置apache以域名访问 发布:2025-03-13 02:22:34 浏览:559
android视频录制播放 发布:2025-03-13 02:10:32 浏览:601
php从数据库中读取数据 发布:2025-03-13 02:10:27 浏览:942
热血传奇任务脚本 发布:2025-03-13 02:06:16 浏览:303
t4服务器什么牌子好 发布:2025-03-13 02:02:39 浏览:633