我在尝试弄清楚如何解析json文件中的一行时遇到了一些麻烦,因此它仅将行的一部分作为字符串返回。我将在下面说明:
public String GetDistance(String origin, String destination) throws MalformedURLException, IOException {
//URL url = new URL("https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins" + origin + ",UK+destination=" + destination + ",UK&key=mykey");
URL url = new URL("https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=Cornwall,UK&destinations=London,UK&key=mykey");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
String line, outputString = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = reader.readLine()) != null) {
if (line.contains("distance")) {
outputString = reader.readLine().trim();
return outputString;
}
}
return outputString;
}
此功能的作用是使用Google Maps API在浏览器中创建一个json文件:
{
"destination_addresses" : [ "London, UK" ],
"origin_addresses" : [ "Cornwall, UK" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "284 mi",
"value" : 456443
},
"duration" : {
"text" : "4 hours 52 mins",
"value" : 17530
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
当前,“ outputString”返回以下行:“ text”:“ 284 mi”。但是,所需的输出只是返回里程“ 284”。
我知道这很可能是转贴,但是我一直在寻找解决方案,但未能成功实现。
在此方面提供的任何帮助将非常感谢,干杯。
答案 0 :(得分:0)
您可以有2种解决方案:
解析JSON并将其作为对象,然后仅返回您要查找的String。
按如下所示分割行:
outputString = reader.readLine().trim();
上面的那行返回“ text”:“ 284 mi”
然后您需要用:
分隔行:
outputString.split(":")
应该创建一个包含2个字符串的数组:"text"
和"284 mi"
然后获取第二个String并将其分隔为空格并获取第一个String:
outputString.split("\\s")
现在您拥有:"284
然后将其从子索引1返回到结尾,请参见docs:
outputString.substring(1)
然后将它们放在一起:
return outputString.split(":")[1].split("\\s")[0].substring(1)
我还没有尝试上面的代码,但是应该可以。
顺便说一句,跟随Java Naming Conventions
并持续使用它们