2017-10-16 50 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