您的位置:首页 > 移动开发 > Android开发

Android项目如何从本地读取JSON字符串

2015-08-06 14:11 519 查看
     如果我现在有这样一个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    .欢迎大家访问,目前还在不断完善中,希望大家给予建议。

github主页:https://github.com/chenyufeng1991  。欢迎大家访问!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: