使用正则表达式从JSON字符串中去除所有空值
给定任何有效字符串,是否有可靠的正则表达式或算法来删除所有设置为null的属性使用正则表达式从JSON字符串中去除所有空值,json,regex,string,apex,Json,Regex,String,Apex,给定任何有效字符串,是否有可靠的正则表达式或算法来删除所有设置为null的属性 { "prop1":"value1", "prop2":null, "prop3": "value2", "prop4":null } 假定无法使用反序列化/序列化库。JSON也被缩小,没有空格 到目前为止,我的情况如下: public String replaceNulls(String json){ json = json.replaceAll("(\"[\w]*\":null,)|(,?
{
"prop1":"value1",
"prop2":null,
"prop3": "value2",
"prop4":null
}
假定无法使用反序列化/序列化库。JSON也被缩小,没有空格
到目前为止,我的情况如下:
public String replaceNulls(String json){
json = json.replaceAll("(\"[\w]*\":null,)|(,?\"[\w]*\":null)",""); //regex replace all method
return json;
}
但我不确定它是否涵盖所有情况。即使是这样,我觉得可能有一种更优化的方法来实现它。你不能为此使用解析器吗?@hwnd nope。。。这是一个很长的解释,但我使用的语言(apex)对序列化的支持非常有限。我可以从一个对象序列化,但所有空字段都以json字符串的形式输出。我调用的API将它们视为无效而拒绝。对不起,技术上有一个解析器:如果可能的话,我真的希望使用往返序列化/反序列化。也许我可以使用解析器在从对象序列化后清理字符串。虽然我认为这个正则表达式更好,但它似乎并不容易:
“\w+?”\s*:\s*null,
我没有读到您的JSON被缩小了,所以在正则表达式中不需要它。所以它最终应该变成“\w+?”:null,
。我会在这之后立即放置第二个replace,将“,}
替换为”}
。您不能为此使用解析器吗?@hwnd nope。。。这是一个很长的解释,但我使用的语言(apex)对序列化的支持非常有限。我可以从一个对象序列化,但所有空字段都以json字符串的形式输出。我调用的API将它们视为无效而拒绝。对不起,技术上有一个解析器:如果可能的话,我真的希望使用往返序列化/反序列化。也许我可以使用解析器在从对象序列化后清理字符串。虽然我认为这个正则表达式更好,但它似乎并不容易:“\w+?”\s*:\s*null,
我没有读到您的JSON被缩小了,所以在正则表达式中不需要它。所以它最终应该变成“\w+?”:null,
。我将在这之后立即放置第二个replace,用“}
替换”}
。