我有一个填充了字典数组的数组。我将此数组作为字符串发送到mysql数据库进行存储和检索。每个条目的数组数量和字典数量各不相同。在Objective-C中它非常简单,我使用此代码移动到数组和从数组移动到字符串。
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:itemListArray options:kNilOptions error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSData *td = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableArray *newArray = [NSJSONSerialization JSONObjectWithData:td options:kNilOptions error:&error];
这非常适合填充我的tableviews并根据需要访问数据以获取详细信息。
我坚持在java中如何做到这一点。以下是从Web服务收到的字符串示例。
[[{"Person":"Me","PersonID":0,"Description":"jake"},{"Person":"Me","PersonID":0,"Description":"mickey"}],[{"Person":"You","PersonID":1,"Description":"sophia"},{"Person":"You","PersonID":1,"Description":"jasmine"}]]
正如您所看到的,它是一个二维数组,每个数组有2个数组和2个字典。如何将其转换为java中的字典数组数组?我尝试过这样的东西,其中ed2是一个如上所示的字符串。
JSONArray jArray = new JSONArray(ed2);
JSONObject jObject = new JSONObject(ed2);
但是这两个抛出异常而不会编译。对于java来说真的很新,但我见过的每个接近的例子都使用了这些对象。如果有一个类似于objective-c的函数来使我很容易找到但是我总是可以解析字符串并在需要时通过强力填充数组,这将是非常棒的。
编辑: 这是一个问题的代码片段。
// JSONArray from server, pull out the first object in the array
JSONObject jsonObject = (JSONObject) getItem(position);
if (jsonObject.has("EventData")) {
eventData = jsonObject.optString("EventData");
}
// clean up some aspects of the string (this will be fixed later, extra characters will not be stored.
String ed2 = (eventData.replace("\\", ""));
// ed2 at this point: [[{"Person":"Me","PersonID":0,"Description":"jake"},{"Person":"Me","PersonID":0,"Description":"mickey"}],[{"Person":"You”,"PersonID":1,"Description":"sophia"},{"Person":"You”,"PersonID":1,"Description":"jasmine"}]]
try {
JSONArray jArray = new JSONArray(ed2);
} catch (JSONException e) {
e.printStackTrace();
// error: Method threw 'java.lang.NullPointerException' exception. Cannot evaluate org.json.JSONArray.toString()
}
try {
JSONObject jObject = new JSONObject(ed2);
} catch (JSONException e) {
e.printStackTrace();
// error: Method threw 'java.lang.NullPointerException' exception. Cannot evaluate org.json.JSONObject.toString()
}