Azure表无法存储展平的JSON

时间:2018-01-24 07:06:16

标签: json azure-table-storage

我正在使用npm flat包,并且数组/对象被展平,但是对象/数组键被''包围。 ,像在&task`status.0.data'使用下面的对象。

这些特定字段不会存储到AzureTables中 - 其他字段会通过,但会忽略这些字段。我该如何解决这个问题?

var obj1 = {
    "studentId": "abc",
    "task_status": [
            {
                "status":"Current",
                "date":516760078
            },
            {
                "status":"Late",
                "date":1516414446
            }
        ],
    "student_plan": "n"
 }

以下是我如何使用它 - 简化代码示例:同样,它成功地写入表中,但不会写出被展平的属性(参见下文):

var flatten = require('flat')
newObj1 = flatten(obj1);
var entGen = azure.TableUtilities.entityGenerator;
newObj1.PartitionKey = entGen.String(uniqueIDFromMyDB);
newObj1.RowKey = entGen.String(uniqueStudentId);
tableService.insertEntity(myTableName, newObj1, myCallbackFunc);

在上面的示例中,展平的对象看起来像:

var obj1 = {
    studentId: "abc",
    'task_status.0.status': 'Current',
    'task_status.0.date': 516760078,
    'task_status.1.status': 'Late',
    'task_status.1.date': 516760078,
    student_plan: "n"
 }

然后我会添加PartitionKey和RowKey。

所有task_status字段都将无法插入。

编辑:这与实际的展平过程没有任何关系 - 我刚检查了一个非常好的JSON对象,其中的键有' x.y.z'其中,AzureTables似乎并不接受这些列名......这几乎完全破坏了存储无模式数据的价值主张,而没有重大的返工。

1 个答案:

答案 0 :(得分:0)

不支持列名中的

.。您可以use a custom delimiter代替展平对象。

例如:

newObj1 = flatten(obj1, {delimiter: '__'});