在第7个子实时数据库之后,“实时转换"数据库.到json数组 [英] After 7th child Realtime database "convert" to json array

查看:44
本文介绍了在第7个子实时数据库之后,“实时转换"数据库.到json数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个每天执行的作业,此过程将创建一个子级DAY并在DAY内添加多个子级HOUR,问题是当我尝试添加7个以上子级时,实时数据库会转换我的JSON树在一个数组中.

I'm trying to create a job to execute each day, this procedure will create a child DAY and add many children HOUR inside DAY, the problem is when I try to add more than 7 child, Realtime Database converts my JSON tree in an array.

我想要这个JSON结果:

I want this JSON result:

{
  "CALENDAR" : {
    "8" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "8:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    },
    "9" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "9:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    }

    .
    .
    .

    "19" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "19:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    }
  }
}

但是,如果我插入到HOUR 19,则在Realtime Database上插入数据的结果是这样的:

But if i insert until HOUR 19, result of insert data on Realtime Database is this:

{
  "CALENDAR" : [ null, null, null, null, null, null, null, null, {
    "AVAILABLE" : true,
    "PURCHASEKEY" : "NA",
    "TIME" : "8:00",
    "TITLE" : "NA",
    "USERID" : "NA",
    "USERNAME" : "NA"
  }, {
    "AVAILABLE" : true,
    "PURCHASEKEY" : "NA",
    "TIME" : "9:00",
    "TITLE" : "NA",
    "USERID" : "NA",
    "USERNAME" : "NA"
  }, 

   .
   .
   .

  {
    "AVAILABLE" : true,
    "PURCHASEKEY" : "NA",
    "TIME" : "19:00",
    "TITLE" : "NA",
    "USERID" : "NA",
    "USERNAME" : "NA"
  } ]
}

如果我仅添加7个孩子就可以了,结果是这样的:

If i add just 7 child works fine, the result is this:

{
  "CALENDAR" : {
    "8" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "8:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    },
    "9" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "9:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    }, 

    .
    .
    .

    "14" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "14:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    }
  }
}

我正在使用Function创建此数据,我的代码是:

I'm using Function to create this data, my code is:

exports.createDayHour = functions.pubsub.schedule('every day 00:00').onRun(async context => {
        var day = moment().add(2,'days').format('dddd')
        var _day = moment().add(3,'days').format('DDMMYYYY')

        if(day !== 'Saturday' || day !== 'Sunday'){
            await admin
                .database()
                .ref('CALENDAR')
                .set({
                        8 : {
                            "AVAILABLE" : true,
                            "PURCHASEKEY" : "NA",
                            "TIME" : "8:00",
                            "TITLE" : "NA",
                            "USERID" : "NA",
                            "USERNAME" : "NA"
                        },
                        9 : {
                            "AVAILABLE" : true,
                            "PURCHASEKEY" : "NA",
                            "TIME" : "9:00",
                            "TITLE" : "NA",
                            "USERID" : "NA",
                            "USERNAME" : "NA"
                        },
                        10 : {
                            "AVAILABLE" : true,
                            "PURCHASEKEY" : "NA",
                            "TIME" : "10:00",
                            "TITLE" : "NA",
                            "USERID" : "NA",
                            "USERNAME" : "NA"
                        },
                        11 : {
                            "AVAILABLE" : true,
                            "PURCHASEKEY" : "NA",
                            "TIME" : "11:00",
                            "TITLE" : "NA",
                            "USERID" : "NA",
                            "USERNAME" : "NA"
                        },
                        12 : {
                            "AVAILABLE" : true,
                            "PURCHASEKEY" : "NA",
                            "TIME" : "12:00",
                            "TITLE" : "NA",
                            "USERID" : "NA",
                            "USERNAME" : "NA"
                        },
                        13 : {
                            "AVAILABLE" : true,
                            "PURCHASEKEY" : "NA",
                            "TIME" : "13:00",
                            "TITLE" : "NA",
                            "USERID" : "NA",
                            "USERNAME" : "NA"
                        }
                })
        }
    });

我尝试了很多方法,使用FOR循环,异步功能..但没有成功.请有人知道我的代码有什么问题吗?

I tried so many ways, using FOR looping, async func..but not success. Please someone know what wrong of my code?

推荐答案

您看到的是Firebase客户端对看起来像数组的数据执行的数组强制.无法启用/禁用它,但是您可以通过确保键看起来不像数组索引来绕过它.

What you're seeing is the array-coercion that the Firebase clients do on data that looks like an array. There's no way to enable/disable it, but you can bypass it by ensuring your keys don't look like array indexes.

最简单的方法是在所有键之前加上固定的字符串,例如"hour _" .所以:

The simplest way to do that is to prefix all your keys with a fixed string, like "hour_". So:

{
  "CALENDAR" : {
    "hour_08" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "8:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    },
    "hour_09" : {
      "AVAILABLE" : true,
      "PURCHASEKEY" : "NA",
      "TIME" : "9:00",
      "TITLE" : "NA",
      "USERID" : "NA",
      "USERNAME" : "NA"
    }, 

这使键成为真实的字符串,因此Firebase客户端不会再将它们误认为是数组索引.

This makes the keys be real strings, so the Firebase clients won't mistake them for array indices anymore.

正如您在示例中看到的那样,我还建议您将值填充为始终为2位数字,以使它们始终具有相同的长度.现在可能不需要,但是在某些时候可能会很有帮助.

As you can see in the example, I'd also recommend padding the values to always be 2 digits, so that they're always the same length. This might not be needed now, but it may be very helpful at some point.

这篇关于在第7个子实时数据库之后,“实时转换"数据库.到json数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆