Java中json文档中叶节点的所有路径的输出列表

例如:给定此json文档:

{

"store": {

"book": [

{

"category": "reference",

"author": "Nigel Rees",

"title": "Sayings of the Century",

"price": 8.95

},

{

"category": "fiction",

"author": "Herman Melville",

"title": "Moby Dick",

"isbn": "0-553-21311-3",

"price": 8.99

},

],

"bicycle": {

"color": "red",

"price": 19.95

}

},

"expensive": 10

}

我想产生(类似)此输出:

store.book.category: "reference"

store.book.author: "Nigel Rees"

store.book.title: "Sayings of the Century"

store.book.price: 8.95

store.book.category: "fiction"

store.book.author: "Herman Melville"

store.book.title: "Moby Dick"

store.book.isbn: "0-553-21311-3"

store.book.price: 8.99

store.bicycle.color: "red"

store.bicycle.price: 19.95

expensive:10

与其使用原始文本,不如使用基于健壮的json库(gson,jackson等)之一的高效解决方案。

回答:

事实证明,使用Gson做到这一点非常容易,尤其是使用2.3中引入的JsonReader.getPath()方法时。

static void parseJson(String json) throws IOException {

JsonReader reader = new JsonReader(new StringReader(json));

reader.setLenient(true);

while (true) {

JsonToken token = reader.peek();

switch (token) {

case BEGIN_ARRAY:

reader.beginArray();

break;

case END_ARRAY:

reader.endArray();

break;

case BEGIN_OBJECT:

reader.beginObject();

break;

case END_OBJECT:

reader.endObject();

break;

case NAME:

reader.nextName();

break;

case STRING:

String s = reader.nextString();

print(reader.getPath(), quote(s));

break;

case NUMBER:

String n = reader.nextString();

print(reader.getPath(), n);

break;

case BOOLEAN:

boolean b = reader.nextBoolean();

print(reader.getPath(), b);

break;

case NULL:

reader.nextNull();

break;

case END_DOCUMENT:

return;

}

}

}

static private void print(String path, Object value) {

path = path.substring(2);

path = PATTERN.matcher(path).replaceAll("");

System.out.println(path + ": " + value);

}

static private String quote(String s) {

return new StringBuilder()

.append('"')

.append(s)

.append('"')

.toString();

}

static final String REGEX = "\\[[0-9]+\\]";

static final Pattern PATTERN = Pattern.compile(REGEX);

以上是 Java中json文档中叶节点的所有路径的输出列表 的全部内容, 来源链接: utcz.com/qa/414691.html

回到顶部