使用正则表达式拆分简单的 JSON 结构

Posted

技术标签:

【中文标题】使用正则表达式拆分简单的 JSON 结构【英文标题】:Split a simple JSON structure using a regular expression 【发布时间】:2012-11-03 06:45:23 【问题描述】:

我以前从未使用过正则表达式,我希望拆分一个包含一个或多个 JSON 对象的文件,这些 JSON 对象没有用逗号分隔。所以我需要将它们拆分为“”并保留两个花括号。这是字符串的样子:

id:"123",name:"myName"id:"456",name:"anotherName"

我想要一个字符串数组,比如使用string.split()

["id:"123",name:"myName"", ""id:"456",name:"anotherName""]

【问题讨论】:

***.com/questions/2773710/…的可能重复 我不知道,那个问题在对象内部有 JSON 对象,我正在尝试做一些更简单但不知道如何做的事情。现在我正在使用 String[] temp = json.split("\\\\");它得到第一个很好,但我认为它删除了一些花括号,所以第二个对象不正确。 如果有任何机会,JSON 中的某些字符串值可能包含,那么您唯一的机会就是真正解析它。您可以将其解析为真正的 JSON,也可以将其解析为足以将字符串内容(可能也包括双引号)与其他内容分开,但您必须对其进行解析。 我想有人可以输入带有 的 cmets 的可能性很小。 (JSON 对象中有一个 cmets 字段)。现在我正在使用 String[] temp = json.split("(?=\\)");它正在工作,但我没有考虑过你提出的这个问题。谢谢! 致投票结束的人:请阅读这两个问题。另一个是 php 中复杂的多级 JSON 字符串的拆分(不解析几乎不可能),而这个是 Java 中特定的一级 JSON 字符串的拆分(当然可行)。 【参考方案1】:

如果您的对象没有比您展示的更复杂,您可以像这样使用lookarounds:

String[] strs = str.split("(?<=\\)(?=\\)");

示例:

String str = "id:\"123\",name:\"myName\"id:\"456\",name:\"yetanotherName\"id:\"456\",name:\"anotherName\"";
String[] strs = str.split("(?<=\\)(?=\\)");
for (String s : strs) 
    System.out.println(s);          

打印

id:"123",name:"myName"
id:"456",name:"anotherName"
id:"456",name:"yetanotherName"

如果您的对象更复杂,则正则表达式可能不起作用,您必须解析字符串。

【讨论】:

遇到了同样的问题。这就像魅力一样。谢谢@dystroy :)

以上是关于使用正则表达式拆分简单的 JSON 结构的主要内容,如果未能解决你的问题,请参考以下文章

Nifi JSON正则表达式

正则表达式拆分逗号前面没有特定单词

C# 正则表达式拆分为 Java 模式拆分

如何使用正则表达式拆分字符串并包含空格

C ++拆分字符串基于/使用(增强)正则表达式来查找令牌

如何使用正则表达式从 JSON 结构中提取子节点?