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

时间:2015-06-15 01:10:53

标签: c# regex json

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

有人在此处发布的Javascript中遇到同样的问题Convert all the integer value to string in JSON

我怀疑有一种方法可以在这里使用Regex.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}");

2 个答案:

答案 0 :(得分:0)

  

在json格式的字符串中用引号

包装长度超过17位的所有整数

我会使用以下内容:

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\"");

答案 1 :(得分:0)

零宽度负向前瞻/后瞻(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"