如何将Firestore文档转换为纯json,反之亦然

马欣达

我正在尝试使用Rest API来获取firestore文档,并且它以以下格式返回数据

{"fields":{"list1":{"arrayValue":{"values":[{"stringValue":"item1"},{"stringValue":"item2"}]}}}}

我如何将上述文档转换为如下所示的普通JavaScript对象,并将其转换回Firestore文档,然后再进行更新调用

{"list1":["item1","item2"]}

Firestore控制台中的数据截图 在此处输入图片说明

编辑:更多信息

JSON sample1由Firestore API返回,并具有所有数据类型信息

json sample2是我的实际数据,没有类型信息。

我的问题是Firestore RestApi get调用以json sample1格式返回响应。我想更新api响应中的一些信息,并将更新后的值发送回Firestore数据库。但是由于响应中的所有类型信息,我无法在必要时更新值。所以我试图找到是否有一种方法可以将api响应转换为json sample2。

使用的API URL:https : //firestore.googleapis.com/v1/projects/projects/ {project_id} / databases / {database_id} / documents / {document_path}

马欣达

似乎使用rest api的唯一方法是编写自己的转换。下面的代码满足了我的要求

let jsonToDocument = function (value) {
    if (!isNaN(value)) {
        if (value.toString().indexOf('.') != -1)
            return { 'doubleValue': value };
        else
            return { 'integerValue': value };
    } else if (value === 'true' || value === 'false' || typeof value == 'boolean') {
        return { 'booleanValue': value };
    } else if (Date.parse(value)) {
        return { 'timestampValue': value };
    } else if (typeof value == 'string') {
        return { 'stringValue': value };
    } else if (value && value.constructor === Array) {
        return { 'arrayValue': { values: value.map(v => jsonToDocument(v)) } };
    } else if (typeof value === 'object') {
        let obj = {};
        for (let o in value) {
            obj[o] = jsonToDocument(value[o]);
        }
        return { 'mapValue': { fields: obj } };
    }

}
let documentToJson = function (fields) {
    let result = {};
    for (let f in fields) {
        let key = f, value = fields[f],
            isDocumentType = ['stringValue', 'booleanValue', 'doubleValue',
                'integerValue', 'timestampValue', 'mapValue', 'arrayValue'].find(t => t === key);
        if (isDocumentType) {
            let item = ['stringValue', 'booleanValue', 'doubleValue', 'integerValue', 'timestampValue']
                .find(t => t === key)
            if (item)
                return value;
            else if ('mapValue' == key)
                return documentToJson(value.fields || {});
            else if ('arrayValue' == key) {
                let list = value.values;
                return !!list ? list.map(l => documentToJson(l)) : [];
            }
        } else {
            result[key] = documentToJson(value)
        }
    }
    return result;
}
let documentData = { "list1": { "arrayValue": { "values": [{ "stringValue": "item1" }, { "stringValue": "item2" }] } } }
let jsonData = documentToJson(documentData);
let documentData1 = jsonToDocument(jsonData).mapValue.fields;
console.log(JSON.stringify(documentData));
console.log(JSON.stringify(jsonData));
console.log(JSON.stringify(documentData1));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将CLOB转换为图像,反之亦然?

来自分类Dev

如何将CLOB转换为图像,反之亦然?

来自分类Dev

如何将整数转换为指针,反之亦然

来自分类Dev

如何将 QPixMap 转换为 QPainterPath,反之亦然?

来自分类Dev

如何将JSON转换为Java对象,反之亦然

来自分类Dev

如何将图像从黑色转换为白色,反之亦然

来自分类Dev

如何将WPF英寸单位转换为Winforms像素,反之亦然?

来自分类Dev

如何将joda datetime转换为String,反之亦然

来自分类Dev

如何将内存流转换为字符串数组,反之亦然

来自分类Dev

如何将邻接矩阵转换为发病率矩阵,反之亦然?

来自分类Dev

如何将小写字符串转换为大写,反之亦然?

来自分类Dev

如何将Kotlin ByteArray转换为NsData,反之亦然

来自分类Dev

如何将分量从HSV转换为RGB,反之亦然

来自分类Dev

如何将html标记转换为xml标记,反之亦然

来自分类Dev

如何将pandas DataFrame转换为字节,反之亦然?

来自分类Dev

如何将 AES 加密输出字节转换为字符串,反之亦然

来自分类Dev

如何将 QTime 12 转换为 24 小时格式,反之亦然

来自分类Dev

Dartlang:如何将 int 从网络转换为主机顺序(反之亦然)

来自分类Dev

将括号从{转换为},反之亦然

来自分类Dev

使用Java将.doc / .docx文档转换为.odt(打开文档文本),反之亦然。

来自分类Dev

如何将文本文件转换为二进制文件,反之亦然?

来自分类Dev

Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

来自分类Dev

如何将8字符字符串转换为64位bigint,反之亦然?

来自分类Dev

将列表转换为网格视图,反之亦然

来自分类Dev

元函数将类型转换为整数,反之亦然

来自分类Dev

将枚举类型转换为整数,反之亦然

来自分类Dev

将Intent转换为String,反之亦然

来自分类Dev

将char数组转换为等效的整数,反之亦然

来自分类Dev

将int []转换为short [],反之亦然

Related 相关文章

  1. 1

    如何将CLOB转换为图像,反之亦然?

  2. 2

    如何将CLOB转换为图像,反之亦然?

  3. 3

    如何将整数转换为指针,反之亦然

  4. 4

    如何将 QPixMap 转换为 QPainterPath,反之亦然?

  5. 5

    如何将JSON转换为Java对象,反之亦然

  6. 6

    如何将图像从黑色转换为白色,反之亦然

  7. 7

    如何将WPF英寸单位转换为Winforms像素,反之亦然?

  8. 8

    如何将joda datetime转换为String,反之亦然

  9. 9

    如何将内存流转换为字符串数组,反之亦然

  10. 10

    如何将邻接矩阵转换为发病率矩阵,反之亦然?

  11. 11

    如何将小写字符串转换为大写,反之亦然?

  12. 12

    如何将Kotlin ByteArray转换为NsData,反之亦然

  13. 13

    如何将分量从HSV转换为RGB,反之亦然

  14. 14

    如何将html标记转换为xml标记,反之亦然

  15. 15

    如何将pandas DataFrame转换为字节,反之亦然?

  16. 16

    如何将 AES 加密输出字节转换为字符串,反之亦然

  17. 17

    如何将 QTime 12 转换为 24 小时格式,反之亦然

  18. 18

    Dartlang:如何将 int 从网络转换为主机顺序(反之亦然)

  19. 19

    将括号从{转换为},反之亦然

  20. 20

    使用Java将.doc / .docx文档转换为.odt(打开文档文本),反之亦然。

  21. 21

    如何将文本文件转换为二进制文件,反之亦然?

  22. 22

    Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

  23. 23

    如何将8字符字符串转换为64位bigint,反之亦然?

  24. 24

    将列表转换为网格视图,反之亦然

  25. 25

    元函数将类型转换为整数,反之亦然

  26. 26

    将枚举类型转换为整数,反之亦然

  27. 27

    将Intent转换为String,反之亦然

  28. 28

    将char数组转换为等效的整数,反之亦然

  29. 29

    将int []转换为short [],反之亦然

热门标签

归档