0

当字段名称中有引号时,Kissmetrics 导出显然会产生无效的 json,例如,以下是产生的事件之一:

{
    "ab test group  native dialogs on mobile":"Control",
    "ab test group  "interested" button copy":"Interested",
    "_t":1412633724,
    "_p":"hk5yxuxcqe/935mkbj+pz8xi0a8="
}

(添加了换行符来澄清问题,我们不能使用它们来修复 JSON)。

我正在寻找一种机制来修复这种损坏的 JSON。

我相信我们可以利用一些假设:

  • 我们可以假设生成的 JSON 是扁平的(没有嵌套对象或数组),所以我认为我们可以利用这一点。
  • 我相信所有字段都是字符串,除了 _t,但不是 100% 肯定。
  • 我不认为我们可以假设坏的未转义引号将是平衡的。
  • 我相信 KM 会从字段名称中删除逗号和冒号,但不是 100% 肯定——它们不会从值中删除(尽管我相信值被正确编码)。
4

1 回答 1

0

我现在在 python 中使用的解决方案,我确信它是不完美的:

match = regex.match(r'^{("(?P<fieldName>([^:]*))":(?P<fieldValue>([0-9]*\.?[0-9]+)|("(([^"])|(\\"))*"))(,|}))*$', s)

fieldNames = match.captures('fieldName')
fieldValues = match.captures('fieldValue')

newJson = "{%s}" % (
    ",".join(
        "\"%s\":%s" % (
            fieldName.replace("\"", "\\\""),
            fieldValue,
        )
        for fieldName, fieldValue
        in zip(fieldNames, fieldValues)        
    )
)

这假设键中没有冒号。

于 2016-01-25T18:20:49.887 回答