将原始 json 中的长整数替换为字符串

本文关键字:替换 字符串 长整数 原始 json | 更新日期: 2023-09-27 17:56:05

我正在寻找一种方法,将所有长度超过 17 位的整数包装在引号中的 json 格式字符串中(本质上是在反序列化时使它们成为字符串)。

有人在这里发布在 JavaScript 中面临相同问题 将所有整数值转换为 JSON 中的字符串

我怀疑有一种方法可以在这里使用正则表达式.Replace(),但是需要理解两种语言之间的语法和正则表达式让我有点迷茫。

到目前为止,我有:

        string pattern =  @"/:'s*('d'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd'd+)'s*([,'}])/g";
        content = Regex.Replace(content,pattern, @":""{1}""{2}");

将原始 json 中的长整数替换为字符串

零宽度负前瞻/后视 (https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx#grouping_constructs) 是您应该使用的,以确保开头或结尾没有引号。这样,在进行替换时,您无需知道确切的JSON格式:

string pattern = @"(?<![""'w])('d{17,})(?![""'w])";
string content = Regex.Replace(content, pattern, "'"$1'"");

此解决方案不会关心:和数字之间是否有空格。它还将[ 0123456701234567, 0123456701234567 ]或单独处理数组中的数字。

正则表达式仍然不是一个理想的解决方案,除非您知道将传递哪些内容,因为一旦字符串值中包含数字,它就会中断,例如 "abc 0123456701234567 def" .

将所有

长度超过 17 位的整数包装在 JSON 格式的字符串中,用引号括起来

我会使用以下方法:

string pattern =  "[^'"''d](''d{17,})[^'"''d]";
content = Regex.Replace(content,pattern, "'"$1'"");

第一行选择所有 17 位或更大的数值(并确保它们不是字符串)。第二行将这 17 位数字括在双引号内。

如果您的 JSON 被缩小,它会稍微更改正则表达式。我们可以使用,这将确保生成的 JSON 仍然有效。

string pattern =  ":(''d{17,})";
content = Regex.Replace(content,pattern, "'"$1'"");