我从一个文件获得一个JSON字符串,如下所示:
"[ { "id":"eVgoHOU0000000011“、”网络“:{ "networkName":"EVgo”}、“状态”:“可用”、“插件”:9、“站名”:“批发市场”、“描述”:“商店旁边非常可靠的站点”。)、“位置”:{“纬度”:30.596481,“经度”:-96.353554,地址:{ "address1":“黄金英亩”,"address2":“二楼”,“城市”:“大学车站”,“州”:"TX","zipcode":"77029“},“描述”:“地图标记位置在加油站旁边。”},“连接器”:{“类型”:“美国墙出口”,“电源”:"40安培“,”状态“:”U知名“},{”类型“:”美国墙出口“,“电源”:"40安培“,”状态“:”U知名“},{”类型“:"CHAdeMO",”电源“:"40安培”,“状态”:“不可用”},"planName":“不收费”}]“
我想把它转换成这样的JSONArray:
Scanner scanner = new Scanner(file);
String json = scanner.useDelimiter("\\A").next();
JSONArray array = new JSONArray(json);`但是,数组对象始终为空。这里怎么了?
当我使用以下代码时,更新在我的Android代码中正确工作:
Scanner scanner = new Scanner( context.getResources().openRawResource(R.raw.radar_search));
但是当我从一个文件中创建我之前的扫描器时,它就不能工作了。一定有什么是Android框架做的正确的,Java不是.
更新2我已经能够隔离这个问题。当我用Junit4对我的安卓应用程序进行白盒测试时,就会发生这种情况。因此,我正在构造这个新的对象类,它有一个创建JSONArray的助手方法,并且它不会在junit运行期间被创建。不过,它在普通的java代码运行时中可以很好地创建。
发布于 2016-03-24 15:05:58
我找到了这个问题的真相,并找到了解决办法。结果发现,Android中的Junit测试无法访问Java库。它们只能访问存根(默认情况下会抛出异常)。因此,必须输入整个json库进行测试:
testCompile 'org.json:json:20160212'您可以在maven central:http://mvnrepository.com/artifact/org.json/json上找到json的最新版本号。
发布于 2016-03-23 19:57:06
如果文件包含外部双引号,那么new JSONArray(...)将抛出JSONException。如果没有,我看不出有什么问题。
技术上,Java构造函数不能返回null。使用调试器执行代码。你可能忽略了一个不寻常的例外。
https://stackoverflow.com/questions/36187190
复制相似问题