无法从字符串

时间:2016-03-23 19:35:08

标签: java android json java.util.scanner

我从文件中获取了一个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代码运行时中,它被创建得很好。

2 个答案:

答案 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