2017-03-14 138 views
1

我遇到如何分析以下數據有點麻煩:JSON解析:一個鍵多個值

[{ 
    "Name": "EB DAVIE ST FS HOWE ST", 
    "Latitude": 49.27755, 
    "Longitude": -123.12698, 
    "Routes": "006, C23" }] 

我想獲得「路線」的所有值。然後我想從每個字符串創建一個新的「路由」,並將每個「路由」存儲在一個集合中。但我不知道如何迭代它.. (對於這個例子,我們可以說每個Route只有一個名字)。

到目前爲止,我有:

 JSONObject stop = allStops.getJSONObject(i); 
     JSONArray array = stop.getJSONArray("Routes"); 

     for(int i = 0; i < array.length(); i++) { 
     Route r = new Route(array.get(i)) // i thought (array.get(i)) would give you the String of each value (e.g. "006") 
     Set<Route> routes = new HashSet<Route>(); 
     routes.add(array.get(i)); // then I thought I should just add each route 
} 

但這不起作用。我不知道該怎麼做。

+0

在我看來,路線不是JsonArray而是一個逗號分隔字符串 –

+0

,那麼什麼會我在這種情況下怎麼辦? (對不起,我是解析JSON的新手,所以想要一些指導) – user7696456

回答

0
String routes = stop.getString("Routes"); 
String[] split_routes = routes.split(", "); /*all routes will be stored in this array*/ 
+0

如果routes是一個可選值,可以考慮使用'optString'而不是'getString' –

0

,你可以嘗試使用com.alibaba.fastjson.JSON,定義一個Java類,然後像這樣:

List<MyClass> list= JSON.parseObject(jsonStr, new TypeReference<List<MyClass>>() {}); 
0

我只是修改你的代碼,這將解析您指定的JSON格式,

import org.json.JSONArray; 
import org.json.JSONObject; 

public class JsonParser { 

    public static void main(String[] args) throws Exception { 

     String jsonString = "[{\"Name\":\"EB DAVIE ST FS HOWE ST\",\"Latitude\":49.27755,\"Longitude\":-123.12698,\"Routes\":\"006, C23\"}]"; 
     JSONArray arrayObject = new JSONArray(jsonString); 
     JSONObject inner = arrayObject.getJSONObject(0); 
     String[] keys = JSONObject.getNames(inner); 

     for(String entry : keys) { 
      System.out.println(entry+" : "+inner.get(entry)); 
     } 

    } 
} 
  • 最初我們將json字符串轉換爲JSONArray對象。
  • 然後我們從JSONArray解析JSONObject。這裏我們只有一個 JSONObject,所以我們使用getJSONObject(0)。如果您有多個JSONObject,您可以使用循環迭代這些值。
  • 然後我們將JSONObject中的所有鍵值存儲在 字符串數組中。
  • 最後我們迭代鍵的值。

輸出:

Latitude : 49.27755 
Routes : 006, C23 
Longitude : -123.12698 
Name : EB DAVIE ST FS HOWE ST