随着大模型应用越来越多,大模型返回的json应用也增多,这些json 时不时会出现破损。 如何修复json串,成为大模型应用要处理的一个问题。
工具
- jsonrepair github.com/josdejong/j...
在网上看到这库,试了下效果不错。这是个js库,用typescript写的,可以前端调用;也可以用pythonmonkey 在python 中调用。其原理是BNF解析器,使用解析器的规则修复json格式问题。
安装
js
$ npm install jsonrepair
import { jsonrepair } from 'jsonrepair'
try {
const json = "{name: 'John'}"
const repaired = jsonrepair(json)
console.log(repaired) // '{"name": "John"}'
} catch (err) {
console.error(err)
}
python
pip install pythonmonkey
import pythonmonkey
jsonrepair = pythonmonkey.require('jsonrepair').jsonrepair
json = "[1,2,3,"
repaired = jsonrepair(json)
print(repaired)
# [1,2,3]
能修复哪些问题
- 在缺少的键周围添加引号
- 添加缺少的转义字符
- 添加缺失的逗号
- 添加缺失的右括号
- 修复截断的 JSON
- 将单引号替换为双引号
"..."
用常规双引号替换特殊引号字符- 用常规空格替换特殊空格字符
- 将 Python 常量
None
、True
和False
替换为null
、true
和false
- 删除尾随逗号
- 删除类似
/* ... */
和的评论// ...
- 带围栏的代码块,如
```json
和``````````` - 删除数组和对象中的省略号,例如
[1, 2, 3, ...]
- 删除 JSONP 符号,例如
callback({ ... })
- 从转义字符串中去除转义字符,例如
{"stringified": "content"}
- 删除 MongoDB 数据类型,如
NumberLong(2)
和ISODate("2012-12-19T06:01:17.171Z")
- 连接字符串,例如
"long text" + "more text on next line"
- 将换行符分隔的 JSON 转换为有效的 JSON 数组,例如:
json
{ "id": 1, "name": "John" }
{ "id": 2, "name": "Sarah" }
网上demo
- josdejong.github.io/jsonrepair/ 可以测试jsonrepair json修复情况,并不是所有的破损都可以修复。
我测试的情况如下,// 注释,另起一行就可以修复,在同一行的就处理不了。
arduino
{
'firstName': 'John'
lastName: "Smith"
fullName: John Smith,
// 这是一个另
scores: [ 7.8 6.3 7.3, ],
"about": "John loves a challenge, "
// 这是一个另 }
处理有问题:
arduino
{
'firstName': 'John'
lastName: "Smith"
fullName: John Smith, // 这是一个另
scores: [ 7.8 6.3 7.3, ],
"about": "John loves a challenge, "
// 这是一个另 }
- jsoneditoronline.org/#right=loca... 这里更大强大,上面不能处理的这里也可以修。