Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非Json格式转换为Json格式_Java_Regex_Json - Fatal编程技术网

Java 非Json格式转换为Json格式

Java 非Json格式转换为Json格式,java,regex,json,Java,Regex,Json,我有一个字符串,它“几乎”是一个json字符串,只是它的键没有被引号包围。 通常,它由UI和javascript使用,它们在解释它时没有问题。然而,据我所知,Java中的JSON解析器似乎要求密钥用引号括起来 是否有一种方法可以将字符串转换为有效的json字符串,可能是通过使用Java中的正则表达式。 或者有一个稍微宽松的JSON库 字符串的格式为 { A : "Val1", B : [ SOME NESTED STUFF], C : "Val3" } 我需要把它转换成

我有一个字符串,它“几乎”是一个json字符串,只是它的键没有被引号包围。 通常,它由UI和javascript使用,它们在解释它时没有问题。然而,据我所知,Java中的JSON解析器似乎要求密钥用引号括起来

是否有一种方法可以将字符串转换为有效的json字符串,可能是通过使用Java中的正则表达式。 或者有一个稍微宽松的JSON库

字符串的格式为

{
   A : "Val1", 
   B : [ SOME NESTED STUFF], 
   C : "Val3"
}
我需要把它转换成

{
   "A" : "Val1", 
   "B" : [ SOME NESTED STUFF], 
   "C" : "Val3"
}
不影响任何嵌套的内容。A、B、C键的数量是固定的

谢谢


另外,我无法将适当的JSON字符串返回给我,这是一个预先存在的代码,更改它是非常危险的。

使用以下行代码将所有键(此处单大写字母视为有效键)用双引号括起来:

str = str.replaceAll("\s([A-Z])\s\:\s\"", "\"$1\" : ");

如果您碰巧使用它,它支持非标准JSON,包括不带引号的键:

如果您真的想要一个正则表达式,这可能会起作用:

jsonString.replaceAll("(\\w+)\\s*\\:","\"$1\" :");

这就是说,如果您真的担心涉及嵌套的东西和角落案例,那么您需要的是一个真正的解析器,而不是正则表达式。如果某个值是字符串
“a:”
,则正则表达式不可能精确到足以避免弄乱。如果pingw33n对jackson解析器的描述是正确的,那么这是迄今为止最好的答案。

如果您确定所有以
unquoted\u word:
开头的行都需要引用该单词,那么您可以使用以下方法:

str.replaceAll("(?m)^(\s+)(\w+)(\s*:)", "$1\"$2\"$3");


但是如果可以的话,您可能最好像其他答案所建议的那样使用适当的解析器。

是否保证Val1和Val3不包含双引号?
([^”]\\w+[^”]?):
。。。这只是我的想法,但应该给你指出正确的方向。我们的想法是从冒号返回,因为您知道您正在查找一个或多个未在冒号前面引用的单词字符。谢谢大家……我开始使用json smart,它在解析json时非常方便,并且不需要密钥带有引号。在
{A:“B:C”}
上中断。如果您这样更新,它将无法工作。s.replaceAll(\\s([A-Z])\\s+([\\:\“]),“\“$1\”$2”)我甚至没有考虑未替换的反斜杠。即使它们被修复,表达式仍会弄乱字符串包含的第二个字符(一些字母):“@cHao:的确。。。我没有解释那件事。。。我通过添加
\“
在正则表达式的末尾string@BigFatBaby:使用正确的JSON和JSON解析器,如上帝所愿。或JS和
eval
。但两者中的任何一个都远远超过了正则表达式的能力。正则表达式的能力非常有限;如果你走这条路,过不了多久你就会沮丧得发抖。谢谢……我还意识到Json smart也有它。