Android项目如何从本地读取JSON字符串
2015-08-06 14:11
519 查看
如果我现在有这样一个Demo需要写,就是手头已经有一个JSON字符串,现在要对它进行解析,那么在这个Android项目中,这个JSON字符串应该怎么存储,才能被成功读取。目前有以下三个方案,我们一一来分析。
假定这个JSON如下:
(方案一)JSON存储在一个String字符串中
我们在代码中定义一个String字符串,然后把刚才的JSON串复制给这个String字符串。代码如下:
。
我们发现这样代码是会报错的,是因为引号的问题,JSON键值对中的某些值并没有用引号括起来。语法错误,没办法,我们放弃这种方案。
(方案二)JSON存储到values文件夹下的strings.xml中
Android项目有时候为了国际化的原因,项目或者布局中都不直接写字符串,而是把字符串写到values文件夹下的strings.xml中。这样方便对项目中显示字符的管理。我们尝试把JSON放到strings.xml中。代码如下:
。
那么如何在代码中进行读取呢?我们通过读取并打印的方式来查看这个JSON。读取代码如下:
。
我通过Log日志的方式来进行JOSN的打印,打印结果如下: 仔细观察这个结果其实是有问题的。注意到JSON中的键值对 title和Android开发都没有了”“引号,其他的键值对也是一样。这样读取的JSON在解析的时候会有bug,所以JSON存储到values文件夹下的strings.xml中这种方案也被pass。
。
(3)JSON存储到assets目录下的一个文件中
在Android项目中,assets目录也比较res目录,也是一个存放资源的目录,只是这个目录下的资源在应用程序打包后不会加入到apk中,也就是不会占用应用的空间。现在尝试在assets目录下新建一个Untitled text file,然后把JSON复制进去,我暂且把这个文件命名为test.json.
如下所示:
。
然后我怎么在代码中进行读取呢?读取文件的代码如下:
我再次通过Log日志的方式打印结果,结果如下:
。
分析方案三的Log结果,完全正确。与原来的JSON字符串完全一样,通过这样的方式,我们就可以对这个JSON进行解析了。当然很多实际开发中,JSON是从网络传递过来的,就另当别论了。
我的个人博客主页是http://www.chenyufengweb.com .欢迎大家访问,目前还在不断完善中,希望大家给予建议。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
假定这个JSON如下:
{ "title": "Android开发", "content": "这是一个JSON字符串读取的测试" }
(方案一)JSON存储在一个String字符串中
我们在代码中定义一个String字符串,然后把刚才的JSON串复制给这个String字符串。代码如下:
。
我们发现这样代码是会报错的,是因为引号的问题,JSON键值对中的某些值并没有用引号括起来。语法错误,没办法,我们放弃这种方案。
(方案二)JSON存储到values文件夹下的strings.xml中
Android项目有时候为了国际化的原因,项目或者布局中都不直接写字符串,而是把字符串写到values文件夹下的strings.xml中。这样方便对项目中显示字符的管理。我们尝试把JSON放到strings.xml中。代码如下:
。
那么如何在代码中进行读取呢?我们通过读取并打印的方式来查看这个JSON。读取代码如下:
。
我通过Log日志的方式来进行JOSN的打印,打印结果如下: 仔细观察这个结果其实是有问题的。注意到JSON中的键值对 title和Android开发都没有了”“引号,其他的键值对也是一样。这样读取的JSON在解析的时候会有bug,所以JSON存储到values文件夹下的strings.xml中这种方案也被pass。
。
(3)JSON存储到assets目录下的一个文件中
在Android项目中,assets目录也比较res目录,也是一个存放资源的目录,只是这个目录下的资源在应用程序打包后不会加入到apk中,也就是不会占用应用的空间。现在尝试在assets目录下新建一个Untitled text file,然后把JSON复制进去,我暂且把这个文件命名为test.json.
如下所示:
。
然后我怎么在代码中进行读取呢?读取文件的代码如下:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); InputStreamReader inputStreamReader; try { inputStreamReader = new InputStreamReader(getAssets().open( "test.json"), "UTF-8"); BufferedReader bufferedReader = new BufferedReader( inputStreamReader); String line; StringBuilder stringBuilder = new StringBuilder(); while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line); } inputStreamReader.close(); bufferedReader.close(); Log.i("TAG", stringBuilder.toString()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
我再次通过Log日志的方式打印结果,结果如下:
。
分析方案三的Log结果,完全正确。与原来的JSON字符串完全一样,通过这样的方式,我们就可以对这个JSON进行解析了。当然很多实际开发中,JSON是从网络传递过来的,就另当别论了。
我的个人博客主页是http://www.chenyufengweb.com .欢迎大家访问,目前还在不断完善中,希望大家给予建议。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
相关文章推荐
- Android屏幕适配小技巧sw<n>dp
- Git、SVN 版本控制 在Android Studio 的配置
- android学习笔记之SQLite数据库
- Android TextView跑马灯效果
- 打破Android应用65K方法数魔咒
- Android4.0-Fragment框架实现方式剖析
- 49、android studio 使用技巧记录
- 常见的控件(2)
- Android 5.0 双卡短信处理
- android 设置字体颜色 颜色大全
- Android之高仿手机QQ图案解锁
- Android Uri如何在intent中传输
- Android Api Demos登顶之路(二十三)SoftInputModes
- 实现将Android项目发布到GitHub上面
- Android studio进行NDK开发
- Android性能优化-布局
- Android finish后没有执行 onDestory()
- Android Custom Views and XML attributes
- 关于Android中的四大组件(Activity)
- Android:What is ART?