Android项目怎么从本地读取JSON字符串
如果我现在有这样一个Demo需要写,就是手头已经有一个JSON字符串,现在要对它进行解析,那么在这个Android项目中,这个JSON字符串应该怎么存储,才能被成功读取。目前有以下三个方案,我们一一来分析。
假定这个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 .欢迎大家访问,目前还在不断完善中,希望大家给予建议。
版权声明:本文为博主原创文章,未经博主允许不得转载。