JsonConvert支持带空格的数值字符串转成Number对象
This commit is contained in:
@@ -272,8 +272,10 @@ public class JsonByteBufferReader extends JsonReader {
|
|||||||
@Override
|
@Override
|
||||||
public final int readInt() {
|
public final int readInt() {
|
||||||
char firstchar = nextGoodChar();
|
char firstchar = nextGoodChar();
|
||||||
|
boolean quote = false;
|
||||||
if (firstchar == '"' || firstchar == '\'') {
|
if (firstchar == '"' || firstchar == '\'') {
|
||||||
firstchar = nextChar();
|
quote = true;
|
||||||
|
firstchar = nextGoodChar();
|
||||||
if (firstchar == '"' || firstchar == '\'') return 0;
|
if (firstchar == '"' || firstchar == '\'') return 0;
|
||||||
}
|
}
|
||||||
int value = 0;
|
int value = 0;
|
||||||
@@ -288,6 +290,7 @@ public class JsonByteBufferReader extends JsonReader {
|
|||||||
if (ch >= '0' && ch <= '9') {
|
if (ch >= '0' && ch <= '9') {
|
||||||
value = (value << 3) + (value << 1) + (ch - '0');
|
value = (value << 3) + (value << 1) + (ch - '0');
|
||||||
} else if (ch == '"' || ch == '\'') {
|
} else if (ch == '"' || ch == '\'') {
|
||||||
|
} else if (quote && ch <= ' ') {
|
||||||
} else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') {
|
} else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') {
|
||||||
backChar(ch);
|
backChar(ch);
|
||||||
break;
|
break;
|
||||||
@@ -306,8 +309,10 @@ public class JsonByteBufferReader extends JsonReader {
|
|||||||
@Override
|
@Override
|
||||||
public final long readLong() {
|
public final long readLong() {
|
||||||
char firstchar = nextGoodChar();
|
char firstchar = nextGoodChar();
|
||||||
|
boolean quote = false;
|
||||||
if (firstchar == '"' || firstchar == '\'') {
|
if (firstchar == '"' || firstchar == '\'') {
|
||||||
firstchar = nextChar();
|
quote = true;
|
||||||
|
firstchar = nextGoodChar();
|
||||||
if (firstchar == '"' || firstchar == '\'') return 0L;
|
if (firstchar == '"' || firstchar == '\'') return 0L;
|
||||||
}
|
}
|
||||||
long value = 0;
|
long value = 0;
|
||||||
@@ -322,6 +327,7 @@ public class JsonByteBufferReader extends JsonReader {
|
|||||||
if (ch >= '0' && ch <= '9') {
|
if (ch >= '0' && ch <= '9') {
|
||||||
value = (value << 3) + (value << 1) + (ch - '0');
|
value = (value << 3) + (value << 1) + (ch - '0');
|
||||||
} else if (ch == '"' || ch == '\'') {
|
} else if (ch == '"' || ch == '\'') {
|
||||||
|
} else if (quote && ch <= ' ') {
|
||||||
} else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') {
|
} else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') {
|
||||||
backChar(ch);
|
backChar(ch);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -335,8 +335,16 @@ public class JsonReader extends Reader {
|
|||||||
if (firstchar > ' ') break;
|
if (firstchar > ' ') break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
boolean quote = false;
|
||||||
if (firstchar == '"' || firstchar == '\'') {
|
if (firstchar == '"' || firstchar == '\'') {
|
||||||
|
quote = true;
|
||||||
firstchar = text0[++currpos];
|
firstchar = text0[++currpos];
|
||||||
|
if (firstchar <= ' ') {
|
||||||
|
for (;;) {
|
||||||
|
firstchar = text0[++currpos];
|
||||||
|
if (firstchar > ' ') break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (firstchar == '"' || firstchar == '\'') {
|
if (firstchar == '"' || firstchar == '\'') {
|
||||||
this.position = currpos;
|
this.position = currpos;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -352,7 +360,8 @@ public class JsonReader extends Reader {
|
|||||||
if (currpos == eof) break;
|
if (currpos == eof) break;
|
||||||
char ch = text0[++currpos];
|
char ch = text0[++currpos];
|
||||||
int val = digits[ch];
|
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 == -1) throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") but '" + ch + "' in (" + new String(this.text) + ")");
|
||||||
if (val != -2) value = value * 10 + val;
|
if (val != -2) value = value * 10 + val;
|
||||||
}
|
}
|
||||||
@@ -377,8 +386,16 @@ public class JsonReader extends Reader {
|
|||||||
if (firstchar > ' ') break;
|
if (firstchar > ' ') break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
boolean quote = false;
|
||||||
if (firstchar == '"' || firstchar == '\'') {
|
if (firstchar == '"' || firstchar == '\'') {
|
||||||
|
quote = true;
|
||||||
firstchar = text0[++currpos];
|
firstchar = text0[++currpos];
|
||||||
|
if (firstchar <= ' ') {
|
||||||
|
for (;;) {
|
||||||
|
firstchar = text0[++currpos];
|
||||||
|
if (firstchar > ' ') break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (firstchar == '"' || firstchar == '\'') {
|
if (firstchar == '"' || firstchar == '\'') {
|
||||||
this.position = currpos;
|
this.position = currpos;
|
||||||
return 0L;
|
return 0L;
|
||||||
@@ -394,7 +411,8 @@ public class JsonReader extends Reader {
|
|||||||
if (currpos == eof) break;
|
if (currpos == eof) break;
|
||||||
char ch = text0[++currpos];
|
char ch = text0[++currpos];
|
||||||
int val = digits[ch];
|
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 == -1) throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") but '" + ch + "' in (" + new String(this.text) + ")");
|
||||||
if (val != -2) value = value * 10 + val;
|
if (val != -2) value = value * 10 + val;
|
||||||
}
|
}
|
||||||
@@ -448,6 +466,7 @@ public class JsonReader extends Reader {
|
|||||||
@Override
|
@Override
|
||||||
public final float readFloat() {
|
public final float readFloat() {
|
||||||
String chars = readSmallString();
|
String chars = readSmallString();
|
||||||
|
if (chars != null) chars = chars.trim();
|
||||||
if (chars == null || chars.isEmpty()) return 0.f;
|
if (chars == null || chars.isEmpty()) return 0.f;
|
||||||
return Float.parseFloat(chars);
|
return Float.parseFloat(chars);
|
||||||
}
|
}
|
||||||
@@ -455,6 +474,7 @@ public class JsonReader extends Reader {
|
|||||||
@Override
|
@Override
|
||||||
public final double readDouble() {
|
public final double readDouble() {
|
||||||
String chars = readSmallString();
|
String chars = readSmallString();
|
||||||
|
if (chars != null) chars = chars.trim();
|
||||||
if (chars == null || chars.isEmpty()) return 0.0;
|
if (chars == null || chars.isEmpty()) return 0.0;
|
||||||
return Double.parseDouble(chars);
|
return Double.parseDouble(chars);
|
||||||
}
|
}
|
||||||
@@ -590,7 +610,8 @@ public class JsonReader extends Reader {
|
|||||||
digits[i] = i - 'A' + 10;
|
digits[i] = i - 'A' + 10;
|
||||||
}
|
}
|
||||||
digits['"'] = digits['\''] = -2; //-2 跳过
|
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退出
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user