Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
使用正则表达式从JSON字符串中去除所有空值_Json_Regex_String_Apex - Fatal编程技术网

使用正则表达式从JSON字符串中去除所有空值

使用正则表达式从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,)|(,?

给定任何有效字符串,是否有可靠的正则表达式或算法来删除所有设置为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,用
“}
替换
”}