2017-10-16 3 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 형식을 제공하지 않습니다,하지만 난 별도로 값을 얻을 나눌 지, 그것이 어떻게 가능한지, 내 불쌍한 영어에 대한 미안 해요, 나는 안드로이드의 초보자입니다.

+1

당신은 아마도 당신이 생각하고있는지도를 얻기 위해 = 다시 분할, 쉼표와 공백으로 분리 양쪽 끝에 브래킷을 제거 할 수 있습니다 JSON 형식이 아닙니다. 백엔드 팀에게 적절한 형식으로 응답 해 줄 것을 요청하십시오. – Kunu

+0

백엔드를 지원하지 않고도 분할 할 수있는 옵션이 없습니까? –

+0

일관된 데이터가 아닙니다. 적절한 형식이 없습니다. 그들 중 절반은 키 - 값 쌍에 있고 그 중 절반은 가치가 있습니다. 쉼표로 값을 뽑아 냄으로써 추출한 더러운 트릭을 시도해 볼 수 있습니다. 추출 된 문자열에'='가 포함되어 있는지 확인한 다음 다시'=' – Kunu

답변

0

불행히도, 이것은 유효한 Json이 아닙니다. 당신은해야 IMHO :

  1. 은 당신이 DICT에 추가 할 키/값 쌍을 다음 =이있는 경우
  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

관련 문제