尝试从 JSON 获取某个键的值时获取 'unterminated object at'
Getting 'unterminated object at' when trying to get value of certain key from JSON
这是 json 结构:
{userModel={name=Mark Kohl Mundi, photo_profile=***}, message=hi, timeStamp=1510326004316, newMsgIndicator=0}
这是我正在尝试的:
for (DataSnapshot childrenSnapshot: dataSnapshot.getChildren()) {
try {
JSONObject reader = new JSONObject(childrenSnapshot.getValue().toString());
String a = reader.getString("newMsgIndicator");
Log.d("A", String.valueOf(a));
} catch (JSONException e) {
e.printStackTrace();
}
}
这是我得到的:
org.json.JSONException: Unterminated object at character 23 of {userModel={name=Mark Kohl Mundi, photo_profile=***}, message=hi, timeStamp=1510326004316, newMsgIndicator=0}
我知道错误是因为键的值中没有双引号(""
)。
我想知道如何在我得到的 json 中插入双引号。
您不需要使用 JSONObject
从 Firebase 数据库中获取数据。 Firebase 数据库结构为一对键和值,这意味着数据库中的每个节点都是一个 Map
。因此,我建议您不要使用 JSONObject,而是使用这行代码:
Map<String, Object> map = (Map<String, Object>) childrenSnapshot.getValue();
有了这张地图,您现在可以迭代以相应地获取数据。
如果您的引用指向特定的用户对象(节点),要获取实际名称,请使用以下代码:
String name = childrenSnapshot.child("name").getValue(String.class);
这是 json 结构:
{userModel={name=Mark Kohl Mundi, photo_profile=***}, message=hi, timeStamp=1510326004316, newMsgIndicator=0}
这是我正在尝试的:
for (DataSnapshot childrenSnapshot: dataSnapshot.getChildren()) {
try {
JSONObject reader = new JSONObject(childrenSnapshot.getValue().toString());
String a = reader.getString("newMsgIndicator");
Log.d("A", String.valueOf(a));
} catch (JSONException e) {
e.printStackTrace();
}
}
这是我得到的:
org.json.JSONException: Unterminated object at character 23 of {userModel={name=Mark Kohl Mundi, photo_profile=***}, message=hi, timeStamp=1510326004316, newMsgIndicator=0}
我知道错误是因为键的值中没有双引号(""
)。
我想知道如何在我得到的 json 中插入双引号。
您不需要使用 JSONObject
从 Firebase 数据库中获取数据。 Firebase 数据库结构为一对键和值,这意味着数据库中的每个节点都是一个 Map
。因此,我建议您不要使用 JSONObject,而是使用这行代码:
Map<String, Object> map = (Map<String, Object>) childrenSnapshot.getValue();
有了这张地图,您现在可以迭代以相应地获取数据。
如果您的引用指向特定的用户对象(节点),要获取实际名称,请使用以下代码:
String name = childrenSnapshot.child("name").getValue(String.class);