diff --git a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift index 293f1ca640c4c69fc3e3958329b51671ff6b3508..8390ba1ced0f8a0aff92287b899a81fca0247c77 100644 --- a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift +++ b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift @@ -17,3 +17,21 @@ func convertJsonNumberToString( } return output } + +func convertJsonNumberToString( + in input: Data, + minNumberLength: Int +) -> Data { + guard var string = String(data: input, encoding: .utf8) else { + return input + } + string = string.replacingOccurrences( + of: #":( *)([0-9]{\#(minNumberLength),})( *)(,*)"#, + with: #":$1"$2"$3$4"#, + options: [.regularExpression] + ) + guard let output = string.data(using: .utf8) else { + return input + } + return output +} diff --git a/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift b/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift index db3a4b2edc77a81ae493a03b9294389ff7c6a203..4fc1ecd7f1b729f65f934d11adcac502c0127cf4 100644 --- a/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift +++ b/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift @@ -59,6 +59,28 @@ final class ConvertJsonNumberToStringTests: XCTestCase { } """ ) + + assert( + input: """ + { + "text": "hello", + "number1": 123456789, + "number2": 1234567890, + "number3": 123456789, + "number4": 1234567890 + } + """, + minNumberLength: 10, + expected: """ + { + "text": "hello", + "number1": 123456789, + "number2": "1234567890", + "number3": 123456789, + "number4": "1234567890" + } + """ + ) } } @@ -82,3 +104,24 @@ private func assert( line: line ) } + +private func assert( + input: String, + minNumberLength: Int, + expected: String, + file: StaticString = #file, + line: UInt = #line +) { + XCTAssertNoDifference( + String( + data: convertJsonNumberToString( + in: input.data(using: .utf8)!, + minNumberLength: minNumberLength + ), + encoding: .utf8 + )!, + expected, + file: file, + line: line + ) +}