首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java解析格式错误的json

用Java解析格式错误的json
EN

Stack Overflow用户
提问于 2014-05-07 14:42:47
回答 2查看 746关注 0票数 2

我有一个格式很差的JSON字符串,需要解析。JSON字符串的键不是用双引号包装的,字符串值是用单引号包装的,而不是双引号。

示例:

代码语言:javascript
复制
{ items: [
    { id: 1, name: 'test1' }, 
    { id: 2, name: 'test2' }
] }

解析这个JSON字符串的更好方法是什么?

1)编写自定义解析器(如何编写?)

2)尝试通过执行几个string_replace来修复JSON字符串

需要注意的一点是,JSON字符串相当长(约50 to ),包含相当多的条目。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 14:53:32

Yaml是一个超级集(几乎)的JSon和更多的宽容。在默认情况下,它更接近您所拥有的。

代码语言:javascript
复制
String s = "{ items: [\n" +
        "    { id: 1, name: 'test1' }, \n" +
        "    { id: 2, name: 'test2' }\n" +
        "] }";
Map map = (Map) new Yaml().load(s);
System.out.println(map);

版画

代码语言:javascript
复制
{items=[{id=1, name=test1}, {id=2, name=test2}]}

顺便说一句,默认情况下,它就是这样转储给Yaml的。

代码语言:javascript
复制
System.out.println(new Yaml().dump(map));

版画

代码语言:javascript
复制
items:
- {id: 1, name: test1}
- {id: 2, name: test2}

我用的是蛇毒。还可以将数据绑定到类(Es)。

票数 6
EN

Stack Overflow用户

发布于 2014-05-07 14:45:49

我认为Antlr4是这项工作的最佳工具。

您可以在这里找到一个JSON语法示例,您可以为您的目的轻松地修改它,例如,可以从以下几个方面修改STRING词汇:

代码语言:javascript
复制
STRING :  '"' (ESC | ~["\\])* '"' ;

至:

代码语言:javascript
复制
STRING :  '\'' (ESC | ~["\\])* '\'' ;

您可以修改pair规则如下所示:

代码语言:javascript
复制
UNQUOTEDSTRING :  (ESC | ~["\\])* ;

pair:   UNQUOTEDSTRING ':' value ;

然后,使用监听器或访问者,您可以将修改后的JSON转换为正确的版本,或者直接将其解析为对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23520979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档