㈠ android开发中怎样使用Json
android3.0以后有json解析包JsonReader。
还是建议用gson.jar。
㈡ Android开发中应该使用哪一种主流json框架
Gson、FastJson、Jackson每种都有自己的优劣势。
Gson、FastJson、Jackson综合对比
三种框架在实现上都使用了反射机制;
三种框架目前仍然在维护,所以从这一点来讲,使用任何一个框架都是靠谱的,因为有人在维护,反馈问题可以改,遇到问题也可以问;
三种框架FastJson的包最小(为了方便对比大小,均是对jar包做的统计),只有196K,其次是Gson的227K,Jackson会大很多,超过了1M;
三种框架在1000倍数据量级以内效率都很高、占用内存也低,效率最高的是FastJson,内存占用都差不多;1000倍数据量级以上内存占用会很大,并且平均耗时会超过1S,FastJson表现中规中矩;
json解析、转换是一件很耗CPU的工作;
三种框架在bean转换为json时都有很好的易用性,但在json解析的实现上,FastJson使用起来最简单,其次是Gson;
FastJson对bean有要求,必须要有默认的构造函数,如果bean类没有默认的构造函数并且是无法修改的(比如拿不到源码),相比于另外两个框架会有弱势。
㈢ Android开发中为什么很少使用JSON存储数据
是可以用JSON存储数据对象的,而且也是Google推荐的,可以取代以实现Serializable来存储对象的方法。下面是使用JSON存储数据的原因。
Android开发中,涉及到对象存储,通常的做法是直接实现`Serializable`。有关这个接口,它保证了实现该接口的类的对象能够被`ObjectOutput/InputStream`直接输入输出,即序列化。这很方便,但是也很不好。
提到‘序列化’,大多数人都想到`Serializable`,而实际上‘序列化’的只是指“将对象的状态信息转换为可以存储或传输的形式的过程”,java的`Serializabe`是字节序列化的一种。
`Serialziable`的缺点之一是,实现了该接口的类将失去灵活性。这一点《Effective Java》第74条也指出了,实现了这个`Serializable`的类将会依赖这个类的内部演化,根源在于UID(Serial version UID)。如果你没有指定UID,那么每次这个类被序列化时都会根据这个类的当前状态生成一个UID。想象这么一种场景:这个类已经被导出了,比如发给其他公司或部门使用了,然后你又修改了这个类,那么当你再将这个类发布时,由于UID不同,其他公司或部门的程序员将可能得到一个“InvalidClassException”。
这种情况的根本原因是因为你不能控制序列化的实现,你控制不了UID的生成过程。这就需要一个自定义的序列化形式。在Android中,Google推荐JSON序列化。而且Android程序员也可以使用Gson等工具来进行序列化和反序列化。
和`Serializable`的字节序列化不同,JSON序列化是字符序列化。
此外,`Serializable`只适合存储对象。由于在传输时`Serializalbe`要做大量IO,Android提供了`Parcelable`。
最后,题主不应该把数据库和JSON,XML比较,如果要比,也只能把数据库和文件存储比。数据库适合存储数量大,关系复杂的数据,这样管理,查阅就很方便。与此相对文件存储适合数量小,关系简单的数据。
㈣ JSON的读取和存放,Android开发!
用HTTPConnection(或HTTPClient)通过Path(或URL)获取json.以Stream保存在String中.
使用JSONObject通过String构造JSONObject对象.
在JSONObject中可以以(KEY,VALUES)方式获取值,JSONObject可以生成JSONArray,JSONArray也可解析出JSONObject.
最后,灵活运用.
㈤ Android开发 解析JSON数据格式 如何去掉JSON数
Android开发中如何解析JSON数据格式?
1.JSON解析
(1).解析Object之一:
1 {"url":"http://www。ideaex。net"}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 String url = demoJson.getString("url");
(2).解析Object之二:
1 {"name":"android","name":"iphone"}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 String name = demoJson.getString("name");
3 String version = demoJson.getString("version");
4 System.out.println("name:"+name+",version:"+version);
(3).解析Array之一:
1 {"number":[1,2,3]}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 JSONArray numberList = demoJson.getJSONArray("number");
3 for(int i=0; i<numberList.length(); i++){
4 //因为数组中的类型为int,所以为getInt,其他getString,getLong同用
5 System.out.println(numberList.getInt(i));
6 }
(4).解析Array之二:
1 {"number":[[1],[2],[3]]}
解析方法:
1 //嵌套数组遍历
2 JSONObject demoJson = new JSONObject(jsonString);
3 JSONArray numberList = demoJson.getJSONArray("number");
4 for(int i=0; i<numberList.length(); i++){
5 //获取数组中的数组
6 System.out.println(numberList.getJSONArray(i).getInt(0));
7 }
(5).解析Object和Array:
1 {"mobile":[{"name":"android"},{"name":"iphone"}]}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 JSONArray numberList = demoJson.getJSONArray("mobile");
3 for(int i=0; i<numberList.length(); i++){
4 System.out.println(numberList.getJSONObject(i).getString("name"));
5 }
所以,我们发现get后面接着的是你想要的得到的结果的类型:getType,这个对理解很有帮助。
(6).使用optType:
上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。
如果使用optType,找不到节点,则返回null或者默认值。
1 //无url节点,抛出异常
2 String url = demoJson.getString("url");
3 //无url节点,返回空,如果为基本类型,则返回默认值
4 String url = demoJson.optString("url");
(7).UTF-8的BOM头导致解析JSON异常的问题
到json文件保存为utf-8的时候,在windows平台下,会产生bom头"EF BB EF"字节在文本的最前面(需要用十六进制工具打开才能看的到)。
有两种解决方法:
a.使用UltraEdit打开json文件,另存为的时候,选择格式UTF-8,无BOM头,如果还不行,在用记事本打开,另存为UTF-8下,多试几次就可以了。
b.使用代码处理,截取json主体内容:
1 String jsonString = getJsonString();
2 jsonString = jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);
2.JSON必知
(1).JSON是一种轻量级的数据交换格式
(2).JSON基于两种数据结构:Object和Array。其中Object是“名称/值”对的集合。
(3).对象:大括号,每一组string-value结合以","分隔,string和value以冒号分隔。
(4).数组:
(5).string由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。
(6).value可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
(7).空白可以加入到任何符号之间,包括空格,tab,回车,换行等。
(8).举例:
a.Object实例:
01 {
02 "Image": {
03 "Width": 800,
04 "Height": 600,
05 "Title": "View from 15th Floor",
06 "Thumbnail": {
07 "Url": "http://www.example.com/image/481989943",
08 "Height": 125,
09 "Width": "100"
10 },
11 "IDs": [116, 943, 234, 38793]
12 }
13 }
b.Array实例:
01 [
02 {
03 "precision": "zip",
04 "Latitude": 37.7668,
05 "Longitude": -122.3959,
06 "Address": "",
07 "City": "SAN FRANCISCO",
08 "State": "CA",
09 "Zip": "94107",
10 "Country": "US"
11 },
12 {
13 "precision": "zip",
14 "Latitude": 37.371991,
15 "Longitude": -122.026020,
16 "Address": "",
17 "City": "SUNNYVALE",
18 "State": "CA",
19 "Zip": "94085",
20 "Country": "US"
21 }
22 ]
㈥ Android 如何引用本地json文件
有时候遇到要一些模拟数据的时候,要么写个List<T>,要么写死.
然后数据比较多的时候可以引用本地资源文件,记录下如何使用本地json文件
<1>在java同级目录下创建"assets"资源文件夹
<2>编辑json文本内容
至于json文件夹内容 就自定义了,想要什么内容写什么,对于一个做项目多了的开发者而言 json数据是熟悉到不能再熟悉的了
以下是我在淘宝一个个复制过来自己拼装的一些商品数据
不需要加任何标识,只需要标准的json数据格式就可以了
<3>引用和json解析的工具类,解析用的 Gson也是经常用到的
<4>最后在需要的地方引用,"ExchangeBean"是根据json内容写的一个模型,用于接收存放数据
有时间再补上demo,下面是效果图:
㈦ Android开发中应该使用哪一种主流json框架
Android开发中应该使用的主流json框架有三种,分别是gson、fastjson、jackson这三种。
各自的区别:
gson:谷歌开发的gson很受国内外人士常使用,不过使用率低于fastjson,耗费内存多。
fastjson:框架的fastjson是最小的,属于老牌并且国内开发者经常使用,fastjson必须有默认的构造函数。
jackson:jackson属于小众开发者使用的,jackson的框架包是最大的。
㈧ 在Android开发环境中,麻烦帮我解析一下这段JSON数据,谢谢!
写在Android的Activity中的代码:
importandroid.app.Activity;
importandroid.os.Bundle;
importjava.util.Iterator;
importorg.json.JSONObject;
{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try{
Stringdata="{"DbNo":"db001","code":0,"fileBackup":"http://192.168.4.178:8888/","filePrior":"http://192.168.4.178:8888/","fileServerIp":"192.168.4.178","fileServerIpBackUp":"192.168.4.178","fileServerPort":"8888","fileServerPortBackUp":"8888","msg":"","msgserverIpBackUp":"192.168.4.178","msgserverPortBackUp":"8100","port":"65531","priorIP":"192.168.4.178","userPass":"|2128"}";
JSONObjectobj=newJSONObject(data);
Iterator<?>it=obj.keys();
Stringkey;
while(it.hasNext()){
key=it.next().toString();
System.out.println(key+":"+obj.getString(key));
}
}
catch(Exceptione){
System.out.println(e.toString());
}
}
}
测试后,在Logcat中的输出: