javascript 如何修复截断的字符串json以便能够再次解析它

zqry0prt  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(244)

我有一个JSON字符串在谷歌日志中被截断(由于某些原因,无法修复)
json字符串是255000个字符,为简单起见,考虑原始的json如下所示

{ "a": "1", 
   "b" : [{
      "b1": "<span>text b1</span>"
   },
   {
      "b2": "<span>text b2</span>"
   }],
   "c": "3"
 }

截短的字符串会变成

{ "a": "1", 
   "b" : [{
      "b1": "<spa... 34 characters truncated.

当然,如果我尝试使用JSON.parse解析上面的字符串,我会得到一个错误
现在我所考虑的解决方案是使它成为一个有效的JSON,但丢失一些数据,因此我所期望的输出是

{ "a": "1", 
   "b" : [{
      "b1": "<spa"
    }]
 }

上面所做的是

  • 从字符串末尾删除... 34 characters truncated.
  • 通过添加"结束字符串(在本例中需要,但也可能不需要)
  • 添加足够的]}以使其再次成为有效对象

还有其他一些情况也需要考虑
例如

{ "a": "1", 
   "b" : [{
      "b1": ... 34 characters truncated.

{ "a": "1", 
   "b" : [{
      "b1 ... 34 characters truncated.

做这件事的最佳方法是什么?
我尝试了dirty-json库来修复,但实际上对这种情况没有帮助

zdwk9cvp

zdwk9cvp1#

npm包untruncate-json按预期运行

import untruncateJson from "untruncate-json";

const string = ` { "a": "1", 
   "b" : [{
      "b1": "<spa... 34 characters truncated.`;

// remove non-json ending
const truncatedJson = string.replace(/\.\.\. \d+ characters truncated\.$/,'');

// run library
const untruncatedJson = untruncateJson(truncatedJson);

console.log(untruncatedJson);

输出:

{ 
    "a": "1", 
    "b" : [
        { "b1": "<spa" }
    ]
}
pes8fvy9

pes8fvy92#

恐怕你得自己做这件事了。不过你的方法听起来是个好的开始。

相关问题