我从文件中获取了一个JSON字符串,如下所示:
" [ { " id":" eVgoHOU0000000011", " network":{ " networkName":" EVgo" }, " status":"可用", " plugscore":9, " stationname":" Wholefoods Market", "描述":"商店旁边非常可靠的电台。", " location":{ "纬度":30.596481, "经度":-96.353554, "地址":{ "地址1":" Golden Acres", "地址2":"二楼", " city":" College Station", "州":" TX", " zipcode":" 77029" }, "描述":"地图标记位置在加油站旁边。" }, "连接器":[ { "键入":" US Wall Outlet", " power":" 40 amp", " status":" Uknown" }, { "键入":" US Wall Outlet", " power":" 40 amp", " status":" Uknown" }, { "输入":" CHAdeMO", " power":" 40 amp", "状态":"不可用" } ] " planName":"免费收费" }]"
我想将它转换为像这样的JSONArray:
Scanner scanner = new Scanner(file);
String json = scanner.useDelimiter("\\A").next();
JSONArray array = new JSONArray(json);`
但是,数组对象始终为null。这有什么不对?
更新 当我使用它时,在我的Android代码中正常工作:
Scanner scanner = new Scanner( context.getResources().openRawResource(R.raw.radar_search));
但是当我从文件创建我以前的扫描仪时,它不起作用。必须有一些Android框架正确地做的事情,Java不是......
更新2 我已经能够找出问题所在。当我使用Junit4对我的Android应用程序进行白盒测试时,就会发生这种情况。所以,我正在构建这个新的对象类,它有这个帮助器方法来创建一个JSONArray,并且它不会在junit运行期间创建。但是,在常规的Java代码运行时中,它被创建得很好。
答案 0 :(得分:0)
如果文件包含外部双引号,则new JSONArray(...)
将抛出JSONException
。如果没有,我认为没有问题。
从技术上讲,Java构造函数不能返回null
。使用调试器逐步执行代码。你可能会忽略未被捕获的异常。
答案 1 :(得分:0)
我深入到这个问题的底部,并找到了解决方案。事实证明,Android中的Junit测试无法访问Java JSON库。它们只能访问存根(默认情况下会抛出异常)。因此,必须引入整个json库进行测试:
testCompile 'org.json:json:20160212'
您可以在maven central上找到json的最新版本号:http://mvnrepository.com/artifact/org.json/json