Я анализирую некоторые данные JSON, полученные от вызова службы REST с использованием потоков Java JsonParser.getObjectStream()
, и выполняю фильтрацию по определенным значениям, но никогда не получал совпадения, которого я ожидал. Копая глубже, я обнаружил, что возвращаемые строковые значения содержат дополнительные двойные кавычки в начале и конце.
Вот некоторый код для иллюстрации. Сначала я показываю «прямой» метод получения значений, затем метод streams.
package com.company.jsonptest;
import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.stream.JsonParser;
public class GetStringTest {
public static void main(String[] args) {
System.out.println("Direct...");
JsonParser parser = Json.createParser(new StringReader(json));
parser.next();
JsonObject jsonObject = parser.getObject().asJsonObject();
String username = jsonObject.getString("firstname");
String name = jsonObject.getString("lastname");
System.out.println("firstname: " + username);
System.out.println("lastname: " + name);
System.out.println("Streams...");
JsonParser parser2 = Json.createParser(new StringReader(json));
parser2.next();
parser2.getObjectStream().forEach(entry -> {
String key = entry.getKey();
String value = entry.getValue().toString();
String type = entry.getValue().getValueType().toString();
System.out.println(key + ": " + value + " (" + type + ")");
});
}
private static String json = "{\n"
+ " \"firstname\": \"John\",\n"
+ " \"lastname\": \"Smith\"\n"
+ "}";
}
Вот вывод. Обратите внимание на дополнительные цитаты. Я включил тип JsonValue в качестве дополнительной проверки.
Direct...
firstname: John
lastname: Smith
Streams...
firstname: "John" (STRING)
lastname: "Smith" (STRING)
Есть ли способ обойти это, кроме добавления дополнительного шага для удаления кавычек?