Java 如何将无效的json转换为有效的json,以便对其进行解析

Java 如何将无效的json转换为有效的json,以便对其进行解析,java,json,regex,Java,Json,Regex,我有一个来自前端的无效json,我无法控制它。json是这样的: { "assetClassDetails":[{}], "assetClassRequired":null, "baseUnitofMeasure":"PMI", "bomParent":"Yes", "commodityCodeTaric":"

我有一个来自前端的无效json,我无法控制它。json是这样的:

{
    "assetClassDetails":[{}],
    "assetClassRequired":null,
    "baseUnitofMeasure":"PMI",
    "bomParent":"Yes",
    "commodityCodeTaric":"84158200",
    "enLanguageKey":"EN",
    "enMaterialLongText":"Lenovo Privacy Filter for 14" Notebooks ( L, T and X1 Carbon)"",
    "grossWeightInKg":null,
    "height":null,
    "heightLengthWidthUnit":null,
    "length":null,"manufacturerPartNumber":"",
    "materialLongDescription":"Lenovo Privacy Filter for 14" Notebooks ( L, T and X1 Carbon)"",
    "physicalCategory":"Physical",
    "volume":null,
    "volumeUnit":null,
    "width":null,
    "xxLanguageKey":null,
    "xxMaterialLongText":null
 }
test = test.replaceAll("(,)[\\s]*([^\"])", "_COMMA_ $2");
请看enMaterialLongText和materialLongDescription。我决定用逗号字符分割整个字符串。但这里逗号不仅仅是键值对分隔符,它还存在于某些值中。所以我用了这样的正则表达式:

{
    "assetClassDetails":[{}],
    "assetClassRequired":null,
    "baseUnitofMeasure":"PMI",
    "bomParent":"Yes",
    "commodityCodeTaric":"84158200",
    "enLanguageKey":"EN",
    "enMaterialLongText":"Lenovo Privacy Filter for 14" Notebooks ( L, T and X1 Carbon)"",
    "grossWeightInKg":null,
    "height":null,
    "heightLengthWidthUnit":null,
    "length":null,"manufacturerPartNumber":"",
    "materialLongDescription":"Lenovo Privacy Filter for 14" Notebooks ( L, T and X1 Carbon)"",
    "physicalCategory":"Physical",
    "volume":null,
    "volumeUnit":null,
    "width":null,
    "xxLanguageKey":null,
    "xxMaterialLongText":null
 }
test = test.replaceAll("(,)[\\s]*([^\"])", "_COMMA_ $2");

这很有效。现在我需要另一个正则表达式,以便嵌套的引号可以转换为字符串,如“QUOTE”。Gson将json解析为java对象后,我可以将诸如enMaterialLongText和materialLongDescription之类的属性转换为转义引号。

如果键和值的格式与问题中的格式不同,那么任意地,您无法在您端修复json,它应该在提供者端修复

假设键值对位于单独的行上,则可以使用

StringBuffer fixedJSON=new StringBuffer();

Matcher m=Pattern.compile(“(?如果无效JSON的格式是这样的,每个键值都在自己的行上,那么可以使用
String result=Pattern.compile((?x.group().replace(“\”,”))
@WiktorStribiżew我使用的是java 8,它是Matcher.replaceAll在java 9之前不使用函数接口。您能建议我如何修改java 8的这个接口吗。