2015-08-16 2 views
0

Итак, это строка json, которая у меня есть.json для сопоставления с использованием итератора, читает только первое значение ключа

String json ="{\"BPDataList\":[{\"BPL\":5,\"DataID\":\"6deacbc373e74e1794a7*****\",\"HP\":124,\"HR\":82,\"IsArr\":-1,\"LP\":82,\"Lat\":-1,\"Lon\":-1,\"MDate\":1373392309,\"Note\":\"\",\"LastChangeTime\":1373362486,\"DataSource\":\"FromDevice\",\"TimeZone\":\"+0800\"}],\"BPUnit\":0,\"CurrentRecordCount\":50,\"NextPageUrl\":\"https%3a%2f%2fapi.ihealthlabs.com%3a8443%2fopenapiv2%2fuser%2f05dffbe0dd*****%2fbp.json%2f%3fclient_id%3dddb9cbc759*****%26client_secret%3d4738f9d00e*****%26redirect_uri%3dhttp%253a%252f%252fapi.testweb2.com%252foauthtest.aspx%26access_token%3dxpoBt0ThQQ*****%26start_time%3d1342007016%26end_time%3d1405079016%26page_index%3d2%26sc%3dd63493704c*****%26sv%3d113cb40956*****\",\"PageLength\":50,\"PageNumber\":1,\"PrevPageUrl\":\"\",\"RecordCount\":335}"; 

Я использую этот код для его хранения на карте;

Map<String, Object> map = new HashMap<String, Object>(); 
JSONObject jObject = new JSONObject(json); 

Iterator<?> keys = jObject.keys(); 
while (keys.hasNext()) { 
    try { 
     String key = (String) keys.next(); 
     Object value = jObject.getJSONArray(key); 
     log.debug("value--" + map); 
     map.put(key, value); 
    } catch (Exception e) { 
     log.trace("getUserBG--", e); 
    } 
} 

Но оно хранит только первый элемент на карте, то есть BPDataList. Что я здесь делаю неправильно?

Это содержание карты, когда я печатаю ее.

map:{BPDataList=[{"DataSource":"FromDevice","IsArr":-1,"DataID":"6deacbc373e74e1794a7*****","BPL":5,"HR":82,"MDate":1373392309,"Lat":-1,"Note":"","HP":124,"TimeZone":"+0800","Lon":-1,"LastChangeTime":1373362486,"LP":82}]} 

JSON

{ 
    "BPDataList": [ 
    { 
     "BPL": 5, 
     "DataID": "6deacbc373e74e1794a7*****", 
     "HP": 124, 
     "HR": 82, 
     "IsArr": -1, 
     "LP": 82, 
     "Lat": -1, 
     "Lon": -1, 
     "MDate": 1373392309, 
     "Note": "", 
     "LastChangeTime": 1373362486, 
     "DataSource": "FromDevice", 
     "TimeZone": "+0800" 
    } 
    ], 
    "BPUnit": 0, 
    "CurrentRecordCount": 50, 
    "NextPageUrl": "abc", 
    "PageLength": 50, 
    "PageNumber": 1, 
    "PrevPageUrl": "", 
    "RecordCount": 335 
} 
+0

На какой платформе вы используете? (Кажется, это андроид, если я не ошибаюсь.) – tmrlvi

+0

веб-разработка, используя весенний mvc – HeisenBerg

+0

Чем его помет! Значит, соответствующие люди увидят. – tmrlvi

ответ

1

Это происходит потому, что все, кроме BPDataList не JSONArray.

Изменить код на

while (keys.hasNext()) { 
    try { 
     String key = (String) keys.next(); 
     Object value = jObject.get(key); 
     log.debug("value--" + map); 
     map.put(key, value); 
    } catch (Exception e) { 
     log.trace("getUserBG--", e); 
    } 
} 

Это должно работать нормально

+0

Спасибо. Это сработало. но мне интересно, почему это не вызвало каких-либо исключений. – HeisenBerg

+0

Я не знаю, в какой среде вы работаете, но в моей (Eclipse) это действительно порождало исключения. Они должны быть внутри вашего журнала из-за попытки захвата. Лично я советую против использования catch (Exception e), конечно, пока еще развивается. – ThomasS

+0

Да, это звучит неплохо. спасибо – HeisenBerg