如何使用 GSON 解析 prettyprinted JSON
How to parse prettyprinted JSON with GSON
我正在连接到一些 API。这些调用 return 已经 "prettyprinted" JSON 而不是一行 JSON.
示例:
[
{
"Field1.1": "Value1.1",
"Field1.2": "value1.2",
"Field1.3": "Value1.3"
},
{
"Field2.1": "Value2.1",
"Field2.2": "value2.2",
"Field2.3": "Value2.3"
}
]
当我尝试使用 GSON 解析这样的 JSON 时,它会抛出 JsonSyntaxException。
代码示例:
BufferedReader br = /*Extracting response from server*/
JsonElement jelement = new JsonParser().parse(br.readLine())
有没有办法解析 JSON 这样格式的文件?
编辑:
我试过直接使用 Gson:
BufferedReader jsonBuf = ....
Gson gson = new Gson();
JsonObject jobj = gson.fromJson(jsonBuf, JsonObject.class)
但是当代码终止时 jobj
为 NULL。
我还尝试将包含在 BufferedReader 中的字符串解析为单行字符串,然后在其上使用 JsonParser:
import org.apache.commons.io.IOUtils
BufferedReader jsonBuf = ....
JsonElement jEl = new JsonParser().parse(IOUtils.toString(jsonBuf).replaceAll("\s+", "");
但是我最后得到的JsonElement是一个NULL指针...
我不明白我做错了什么...
BufferedReader::nextLine
只读取一行。您要么从 reader 读取整个 json 到某个 String
变量,要么您将使用 Gson::fromJson(Reader, Type)
并将 reader 直接传递给此方法。
由于您的 json 看起来像一个 json 对象数组,因此可以使用 TypeToken
将其反序列化为 List<Map<String,String>>
:
BufferedReader bufferedReader = ...
Type type = new TypeToken<List<Map<String,String>>>(){}.getType();
Gson gson = new Gson();
List<Map<String,String>> newMap = gson.fromJson(bufferedReader, type);
您也可以根据需要使用一些自定义对象而不是 Map
。
我正在连接到一些 API。这些调用 return 已经 "prettyprinted" JSON 而不是一行 JSON.
示例:
[
{
"Field1.1": "Value1.1",
"Field1.2": "value1.2",
"Field1.3": "Value1.3"
},
{
"Field2.1": "Value2.1",
"Field2.2": "value2.2",
"Field2.3": "Value2.3"
}
]
当我尝试使用 GSON 解析这样的 JSON 时,它会抛出 JsonSyntaxException。
代码示例:
BufferedReader br = /*Extracting response from server*/
JsonElement jelement = new JsonParser().parse(br.readLine())
有没有办法解析 JSON 这样格式的文件?
编辑:
我试过直接使用 Gson:
BufferedReader jsonBuf = ....
Gson gson = new Gson();
JsonObject jobj = gson.fromJson(jsonBuf, JsonObject.class)
但是当代码终止时 jobj
为 NULL。
我还尝试将包含在 BufferedReader 中的字符串解析为单行字符串,然后在其上使用 JsonParser:
import org.apache.commons.io.IOUtils
BufferedReader jsonBuf = ....
JsonElement jEl = new JsonParser().parse(IOUtils.toString(jsonBuf).replaceAll("\s+", "");
但是我最后得到的JsonElement是一个NULL指针...
我不明白我做错了什么...
BufferedReader::nextLine
只读取一行。您要么从 reader 读取整个 json 到某个 String
变量,要么您将使用 Gson::fromJson(Reader, Type)
并将 reader 直接传递给此方法。
由于您的 json 看起来像一个 json 对象数组,因此可以使用 TypeToken
将其反序列化为 List<Map<String,String>>
:
BufferedReader bufferedReader = ...
Type type = new TypeToken<List<Map<String,String>>>(){}.getType();
Gson gson = new Gson();
List<Map<String,String>> newMap = gson.fromJson(bufferedReader, type);
您也可以根据需要使用一些自定义对象而不是 Map
。