diff --git a/src/org/redkale/convert/json/JsonByteBufferReader.java b/src/org/redkale/convert/json/JsonByteBufferReader.java index a4a4e3d08..38e27067e 100644 --- a/src/org/redkale/convert/json/JsonByteBufferReader.java +++ b/src/org/redkale/convert/json/JsonByteBufferReader.java @@ -272,8 +272,10 @@ public class JsonByteBufferReader extends JsonReader { @Override public final int readInt() { char firstchar = nextGoodChar(); + boolean quote = false; if (firstchar == '"' || firstchar == '\'') { - firstchar = nextChar(); + quote = true; + firstchar = nextGoodChar(); if (firstchar == '"' || firstchar == '\'') return 0; } int value = 0; @@ -288,6 +290,7 @@ public class JsonByteBufferReader extends JsonReader { if (ch >= '0' && ch <= '9') { value = (value << 3) + (value << 1) + (ch - '0'); } else if (ch == '"' || ch == '\'') { + } else if (quote && ch <= ' ') { } else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') { backChar(ch); break; @@ -306,8 +309,10 @@ public class JsonByteBufferReader extends JsonReader { @Override public final long readLong() { char firstchar = nextGoodChar(); + boolean quote = false; if (firstchar == '"' || firstchar == '\'') { - firstchar = nextChar(); + quote = true; + firstchar = nextGoodChar(); if (firstchar == '"' || firstchar == '\'') return 0L; } long value = 0; @@ -322,6 +327,7 @@ public class JsonByteBufferReader extends JsonReader { if (ch >= '0' && ch <= '9') { value = (value << 3) + (value << 1) + (ch - '0'); } else if (ch == '"' || ch == '\'') { + } else if (quote && ch <= ' ') { } else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') { backChar(ch); break; diff --git a/src/org/redkale/convert/json/JsonReader.java b/src/org/redkale/convert/json/JsonReader.java index 1e06a726c..05a35fe79 100644 --- a/src/org/redkale/convert/json/JsonReader.java +++ b/src/org/redkale/convert/json/JsonReader.java @@ -335,8 +335,16 @@ public class JsonReader extends Reader { if (firstchar > ' ') break; } } + boolean quote = false; if (firstchar == '"' || firstchar == '\'') { + quote = true; firstchar = text0[++currpos]; + if (firstchar <= ' ') { + for (;;) { + firstchar = text0[++currpos]; + if (firstchar > ' ') break; + } + } if (firstchar == '"' || firstchar == '\'') { this.position = currpos; return 0; @@ -352,7 +360,8 @@ public class JsonReader extends Reader { if (currpos == eof) break; char ch = text0[++currpos]; int val = digits[ch]; - if (val == -3) break; + if (quote && val == -3) continue; + if (val <= -3) break; if (val == -1) throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") but '" + ch + "' in (" + new String(this.text) + ")"); if (val != -2) value = value * 10 + val; } @@ -377,8 +386,16 @@ public class JsonReader extends Reader { if (firstchar > ' ') break; } } + boolean quote = false; if (firstchar == '"' || firstchar == '\'') { + quote = true; firstchar = text0[++currpos]; + if (firstchar <= ' ') { + for (;;) { + firstchar = text0[++currpos]; + if (firstchar > ' ') break; + } + } if (firstchar == '"' || firstchar == '\'') { this.position = currpos; return 0L; @@ -394,7 +411,8 @@ public class JsonReader extends Reader { if (currpos == eof) break; char ch = text0[++currpos]; int val = digits[ch]; - if (val == -3) break; + if (quote && val == -3) continue; + if (val <= -3) break; if (val == -1) throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") but '" + ch + "' in (" + new String(this.text) + ")"); if (val != -2) value = value * 10 + val; } @@ -448,6 +466,7 @@ public class JsonReader extends Reader { @Override public final float readFloat() { String chars = readSmallString(); + if (chars != null) chars = chars.trim(); if (chars == null || chars.isEmpty()) return 0.f; return Float.parseFloat(chars); } @@ -455,6 +474,7 @@ public class JsonReader extends Reader { @Override public final double readDouble() { String chars = readSmallString(); + if (chars != null) chars = chars.trim(); if (chars == null || chars.isEmpty()) return 0.0; return Double.parseDouble(chars); } @@ -590,7 +610,8 @@ public class JsonReader extends Reader { digits[i] = i - 'A' + 10; } digits['"'] = digits['\''] = -2; //-2 跳过 - digits[','] = digits['}'] = digits[']'] = digits[' '] = digits['\t'] = digits['\r'] = digits['\n'] = digits[':'] = -3; //-3退出 + digits[' '] = digits['\t'] = digits['\r'] = digits['\n'] = -3; //-3可能跳过 + digits[','] = digits['}'] = digits[']'] = digits[':'] = -4; //-4退出 } }