Android项目怎么从本地读取JSON字符串

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

     如果我现在有这样一个Demo需要写,就是手头已经有一个JSON字符串,现在要对它进行解析,那么在这个Android项目中,这个JSON字符串应该怎么存储,才能被成功读取。目前有以下三个方案,我们一一来分析。

     假定这个JSON如下:

{
    "title": "Android开发",
    "content": "这是一个JSON字符串读取的测试"
}

(方案一)JSON存储在一个String字符串中

    我们在代码中定义一个String字符串,然后把刚才的JSON串复制给这个String字符串。代码如下:

Android项目怎么从本地读取JSON字符串


我们发现这样代码是会报错的,是因为引号的问题,JSON键值对中的某些值并没有用引号括起来。语法错误,没办法,我们放弃这种方案。


(方案二)JSON存储到values文件夹下的strings.xml中

      Android项目有时候为了国际化的原因,项目或者布局中都不直接写字符串,而是把字符串写到values文件夹下的strings.xml中。这样方便对项目中显示字符的管理。我们尝试把JSON放到strings.xml中。代码如下:
Android项目怎么从本地读取JSON字符串

 

那么如何在代码中进行读取呢?我们通过读取并打印的方式来查看这个JSON。读取代码如下:

Android项目怎么从本地读取JSON字符串


我通过Log日志的方式来进行JOSN的打印,打印结果如下:   仔细观察这个结果其实是有问题的。注意到JSON中的键值对 title和Android开发都没有了”“引号,其他的键值对也是一样。这样读取的JSON在解析的时候会有bug,所以JSON存储到values文件夹下的strings.xml中这种方案也被pass。

Android项目怎么从本地读取JSON字符串


(3)JSON存储到assets目录下的一个文件中

     在Android项目中,assets目录也比较res目录,也是一个存放资源的目录,只是这个目录下的资源在应用程序打包后不会加入到apk中,也就是不会占用应用的空间。现在尝试在assets目录下新建一个Untitled text file,然后把JSON复制进去,我暂且把这个文件命名为test.json.

如下所示:
Android项目怎么从本地读取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日志的方式打印结果,结果如下:

Android项目怎么从本地读取JSON字符串

    分析方案三的Log结果,完全正确。与原来的JSON字符串完全一样,通过这样的方式,我们就可以对这个JSON进行解析了。当然很多实际开发中,JSON是从网络传递过来的,就另当别论了。


   我的个人博客主页是http://www.chenyufengweb.com    .欢迎大家访问,目前还在不断完善中,希望大家给予建议。


版权声明:本文为博主原创文章,未经博主允许不得转载。