尝试从 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);