2017-10-16 78 views
0

我得到這樣一個結果如何拆分這樣的字符串?

{PickupLocation=204, Jai nagar main road, Chandragandhi Nagar, Ponmeni, Madurai, Tamil Nadu 625016, DropLocation=204, Jai nagar main road, Chandragandhi Nagar, Ponmeni, Madurai, Tamil Nadu 625016, PickupLongitude=78.0928147163509, DropLongitude=78.0928147163509, PickupLatitude=9.92065524221638, DropLatitude=9.92065524221638, CustomerId=99, PhoneNumber=96788484887, CustomerName=Mayil, CustomerLastName=Kannan} 

我想這樣

public static void jsonToMap(String t) throws JSONException { 

    HashMap<String, String> map = new HashMap<String, String>(); 
    JSONObject jObject = new JSONObject(t); 
    Iterator<?> keys = jObject.keys(); 

    while(keys.hasNext()){ 
     String key = (String)keys.next(); 
     String value = jObject.getString(key); 
     map.put(key, value); 

    } 

    System.out.println("json : "+jObject); 
    System.out.println("map : "+map); 
} 

但他們不給JSON格式,但我想分開單獨獲取值,怎麼可能,對不起,我可憐的英語,我是Android的初學者。

+1

它不是JSON格式。要求您的後端團隊以適當的格式向您提供回覆。 – Kunu

+0

沒有幫助後端沒有更多選項可供分割? –

+0

這不是一致的數據。沒有適當的格式。其中一半是關鍵值對,其中一半隻是價值。你可以嘗試使用骯髒的技巧通過用逗號分割它們來提取值,然後檢查提取的字符串是否包含'=',再次用'=' – Kunu

回答

0

不幸的是,這不是一個有效的Json。恕我直言,你應該:

  1. 分裂的逗號
  2. 每個子字符串,通過=
  3. 分裂如果你有一個=那麼你有一個鍵/值對添加到字典
  4. 如果不,那麼你可以用默認的鍵來創建一個數組。
1

並非CSV列表中的所有值都有等號,因此地圖可能無法完整存儲您的值。在下面的代碼片段中,我將沒有等號的值存儲爲映射中沒有對應值的鍵。您可以剝離支架上的兩端,用逗號和空格分開,然後可能通過=再次分裂,以獲得您心目中的地圖:

String input = "..."; 
Map<String, String> map = new HashMap<>(); 
input = input.replaceAll("\\s+\\{\\s+(.*)\\s+\\}\\s+", "$1"); 
String[] parts = input.split(",\\s+"); 
for (String part : parts) { 
    String[] vals = part.split("="); 
    map.put(vals[0], vals.length > 1 ? vals[1] : null); 
} 

for (Map.Entry<String, String> entry : map.entrySet()) { 
    System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue()); 
} 

演示在這裏:

Rextester