Merge pull request #809 from sgbrown/unquoted_integer_issue604_issue524
allow unquoted long and integer keys
This commit is contained in:
commit
2b08c88c09
|
@ -951,8 +951,12 @@ public class JsonReader implements Closeable {
|
||||||
if (p == PEEKED_NUMBER) {
|
if (p == PEEKED_NUMBER) {
|
||||||
peekedString = new String(buffer, pos, peekedNumberLength);
|
peekedString = new String(buffer, pos, peekedNumberLength);
|
||||||
pos += peekedNumberLength;
|
pos += peekedNumberLength;
|
||||||
} else if (p == PEEKED_SINGLE_QUOTED || p == PEEKED_DOUBLE_QUOTED) {
|
} else if (p == PEEKED_SINGLE_QUOTED || p == PEEKED_DOUBLE_QUOTED || p == PEEKED_UNQUOTED) {
|
||||||
peekedString = nextQuotedValue(p == PEEKED_SINGLE_QUOTED ? '\'' : '"');
|
if (p == PEEKED_UNQUOTED) {
|
||||||
|
peekedString = nextUnquotedValue();
|
||||||
|
} else {
|
||||||
|
peekedString = nextQuotedValue(p == PEEKED_SINGLE_QUOTED ? '\'' : '"');
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
long result = Long.parseLong(peekedString);
|
long result = Long.parseLong(peekedString);
|
||||||
peeked = PEEKED_NONE;
|
peeked = PEEKED_NONE;
|
||||||
|
@ -1179,8 +1183,12 @@ public class JsonReader implements Closeable {
|
||||||
if (p == PEEKED_NUMBER) {
|
if (p == PEEKED_NUMBER) {
|
||||||
peekedString = new String(buffer, pos, peekedNumberLength);
|
peekedString = new String(buffer, pos, peekedNumberLength);
|
||||||
pos += peekedNumberLength;
|
pos += peekedNumberLength;
|
||||||
} else if (p == PEEKED_SINGLE_QUOTED || p == PEEKED_DOUBLE_QUOTED) {
|
} else if (p == PEEKED_SINGLE_QUOTED || p == PEEKED_DOUBLE_QUOTED || p == PEEKED_UNQUOTED) {
|
||||||
peekedString = nextQuotedValue(p == PEEKED_SINGLE_QUOTED ? '\'' : '"');
|
if (p == PEEKED_UNQUOTED) {
|
||||||
|
peekedString = nextUnquotedValue();
|
||||||
|
} else {
|
||||||
|
peekedString = nextQuotedValue(p == PEEKED_SINGLE_QUOTED ? '\'' : '"');
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
result = Integer.parseInt(peekedString);
|
result = Integer.parseInt(peekedString);
|
||||||
peeked = PEEKED_NONE;
|
peeked = PEEKED_NONE;
|
||||||
|
|
|
@ -167,6 +167,34 @@ public class MapTest extends TestCase {
|
||||||
assertEquals("456", map.get(123));
|
assertEquals("456", map.get(123));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testMapDeserializationWithUnquotedIntegerKeys() {
|
||||||
|
Type typeOfMap = new TypeToken<Map<Integer, String>>() {}.getType();
|
||||||
|
Map<Integer, String> map = gson.fromJson("{123:\"456\"}", typeOfMap);
|
||||||
|
assertEquals(1, map.size());
|
||||||
|
assertTrue(map.containsKey(123));
|
||||||
|
assertEquals("456", map.get(123));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMapDeserializationWithLongKeys() {
|
||||||
|
long longValue = 9876543210L;
|
||||||
|
String json = String.format("{\"%d\":\"456\"}", longValue);
|
||||||
|
Type typeOfMap = new TypeToken<Map<Long, String>>() {}.getType();
|
||||||
|
Map<Long, String> map = gson.fromJson(json, typeOfMap);
|
||||||
|
assertEquals(1, map.size());
|
||||||
|
assertTrue(map.containsKey(longValue));
|
||||||
|
assertEquals("456", map.get(longValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMapDeserializationWithUnquotedLongKeys() {
|
||||||
|
long longKey = 9876543210L;
|
||||||
|
String json = String.format("{%d:\"456\"}", longKey);
|
||||||
|
Type typeOfMap = new TypeToken<Map<Long, String>>() {}.getType();
|
||||||
|
Map<Long, String> map = gson.fromJson(json, typeOfMap);
|
||||||
|
assertEquals(1, map.size());
|
||||||
|
assertTrue(map.containsKey(longKey));
|
||||||
|
assertEquals("456", map.get(longKey));
|
||||||
|
}
|
||||||
|
|
||||||
public void testHashMapDeserialization() throws Exception {
|
public void testHashMapDeserialization() throws Exception {
|
||||||
Type typeOfMap = new TypeToken<HashMap<Integer, String>>() {}.getType();
|
Type typeOfMap = new TypeToken<HashMap<Integer, String>>() {}.getType();
|
||||||
HashMap<Integer, String> map = gson.fromJson("{\"123\":\"456\"}", typeOfMap);
|
HashMap<Integer, String> map = gson.fromJson("{\"123\":\"456\"}", typeOfMap);
|
||||||
|
|
|
@ -501,7 +501,7 @@ public final class JsonReaderTest extends TestCase {
|
||||||
try {
|
try {
|
||||||
reader.nextInt();
|
reader.nextInt();
|
||||||
fail();
|
fail();
|
||||||
} catch (IllegalStateException expected) {
|
} catch (NumberFormatException expected) {
|
||||||
}
|
}
|
||||||
assertEquals("12.34e5x", reader.nextString());
|
assertEquals("12.34e5x", reader.nextString());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user