Jackson JsonParser 获取数组令牌
Jackson JsonParser get Array token
我正在使用 Jackson Json 解析器从 JSON 字符串中获取值,然后将它们插入到 Java 对象中。这是我正在处理的 JSON 的一大块:
{
"address":"aURL",
"links":[
"aURL",
"aURL",
"aURL"
]
}
这是我在 Java 代码中进行的操作。 net 是一个全局 ArrayList,Page 对象有一个 String 地址字段和一个 String[] 链接字段。我想从 JSON 中获取链接的 String 数组并将它们插入 Page 对象。虽然我可以使用 getText() 方法轻松提取地址字符串,但我想不出一种方便的方法来获取 String 数组。这是我的代码:
private static void parse(String json) throws IOException {
JsonParser parser = new JsonFactory().createJsonParser(json);
while (parser.nextToken() != JsonToken.END_OBJECT) {
String tok = parser.getCurrentName();
Page p = new Page();
if ("address".equals(tok)) {
parser.nextToken();
p.setAddress(parser.getText());
}
if ("links".equals(tok)) {
parser.nextToken();
//p.setLinks(HOW TO GET STRING ARRAY)
}
net.add(p);
}
}
我宁愿坚持使用我正在使用的 JsonParser nexting 方法,除非它太笨重了。
你可以试试这个。
private static void parse(String json) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
JsonParser parser = new JsonFactory().createJsonParser(json);
while (parser.nextToken() != JsonToken.END_OBJECT) {
String tok = parser.getCurrentName();
Page p = new Page();
if ("address".equals(tok)) {
parser.nextToken();
p.setAddress(parser.getText());
}
if ("links".equals(tok)) {
parser.nextToken();
ArrayNode node = objectMapper.readTree(parser);
Iterator<JsonNode> iterator = node.elements();
String[] array = new String[node.size()];
for (int i = 0; i < node.size(); i++) {
if (iterator.hasNext()) {
array[i] = iterator.next().asText();
}
}
p.setLinks(array);
}
net.add(p);
}
}
我会用这个;
if ("links".equals(tok)) {
List<String> list = new ArrayList<>();
parser.nextToken();
if (parser.currentToken() == JsonToken.START_ARRAY) {
parser.nextToken();
while (parser.currentToken() != JsonToken.END_ARRAY) {
list.add(parser.getText());
parser.nextToken();
}
}
p.setLinks(list.toArray(new String[list.size()]));
}
我正在使用 Jackson Json 解析器从 JSON 字符串中获取值,然后将它们插入到 Java 对象中。这是我正在处理的 JSON 的一大块:
{
"address":"aURL",
"links":[
"aURL",
"aURL",
"aURL"
]
}
这是我在 Java 代码中进行的操作。 net 是一个全局 ArrayList,Page 对象有一个 String 地址字段和一个 String[] 链接字段。我想从 JSON 中获取链接的 String 数组并将它们插入 Page 对象。虽然我可以使用 getText() 方法轻松提取地址字符串,但我想不出一种方便的方法来获取 String 数组。这是我的代码:
private static void parse(String json) throws IOException {
JsonParser parser = new JsonFactory().createJsonParser(json);
while (parser.nextToken() != JsonToken.END_OBJECT) {
String tok = parser.getCurrentName();
Page p = new Page();
if ("address".equals(tok)) {
parser.nextToken();
p.setAddress(parser.getText());
}
if ("links".equals(tok)) {
parser.nextToken();
//p.setLinks(HOW TO GET STRING ARRAY)
}
net.add(p);
}
}
我宁愿坚持使用我正在使用的 JsonParser nexting 方法,除非它太笨重了。
你可以试试这个。
private static void parse(String json) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
JsonParser parser = new JsonFactory().createJsonParser(json);
while (parser.nextToken() != JsonToken.END_OBJECT) {
String tok = parser.getCurrentName();
Page p = new Page();
if ("address".equals(tok)) {
parser.nextToken();
p.setAddress(parser.getText());
}
if ("links".equals(tok)) {
parser.nextToken();
ArrayNode node = objectMapper.readTree(parser);
Iterator<JsonNode> iterator = node.elements();
String[] array = new String[node.size()];
for (int i = 0; i < node.size(); i++) {
if (iterator.hasNext()) {
array[i] = iterator.next().asText();
}
}
p.setLinks(array);
}
net.add(p);
}
}
我会用这个;
if ("links".equals(tok)) {
List<String> list = new ArrayList<>();
parser.nextToken();
if (parser.currentToken() == JsonToken.START_ARRAY) {
parser.nextToken();
while (parser.currentToken() != JsonToken.END_ARRAY) {
list.add(parser.getText());
parser.nextToken();
}
}
p.setLinks(list.toArray(new String[list.size()]));
}