- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 Java 解析此 JSON。
{
"json": {
"abc": 0,
"def": "100",
"ghi": 1,
"jkl": "0000000000",
"mno": "3",
"pqr": "COLS, COMPLETE",
"stu": 2,
"vwx": "0000010000",
"yz": "00",
"a123": 31,
"b123": 1,
"c123": "1270",
"d123": "2",
"e123": "00",
"f123": 1,
"g123": "0000001000"
},
"_indexes": {
"c123": [
"1270"
],
"h123": [
"1270"
]
},
"_d": false,
"_dd": "2017-09-12T12:03:53.716Z",
"_op": "add",
"_id": 2
}
到目前为止,我已经使用 gson 库完成了以下操作:-
JsonParser par = new JsonParser();
JsonElement jsonelement = par.parse(new FileReader("ddJob.json"));
JsonArray jsonArr = jsonelement.getAsJsonArray();
for(Object o : jsonArr)
{
JsonObject obj = (JsonObject)(o);
JsonObject mArry = obj.getAsJsonObject();
String keyVal = mArry.get("key").toString();
if(keyVal.equalsIgnoreCase("\"jsonstore.LinkTree\""))
{
if(mArry.isJsonArray())
{
System.out.println("It is a JSONArray");
}
else if(mArry.isJsonObject())
{
System.out.println("It is a JSONObject");
}
else if(mArry.isJsonPrimitive())
{
System.out.println("It is a JSONPrimitive");
}
else if(mArry.isJsonNull())
{
System.out.println("It is a JSONNull");
}
}
// Here it prints ,it is a JSONObject
<小时/>
我需要这里的帮助,我无法解析这个 JSONObject,我无法从中获取 JsonArray,并且我无法获取类似原语等的任何内容。我可以在调试器中看到它包含所有信息我需要。由于中间有空格,因此无法读取。
您能否告诉我如何解析此 JSON 的其余部分。
非常感谢。
最佳答案
我用了Java API for JSON Processing 。 jar 可以找到here 。此更新版本应该有助于处理用逗号分隔的多个 JSON
对象。此版本尝试找到正确的逗号,然后根据这些逗号分割字符串。
import java.io.StringReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.json.Json;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;
import static javax.json.stream.JsonParser.Event.KEY_NAME;
import static javax.json.stream.JsonParser.Event.VALUE_FALSE;
import static javax.json.stream.JsonParser.Event.VALUE_NUMBER;
import static javax.json.stream.JsonParser.Event.VALUE_STRING;
import static javax.json.stream.JsonParser.Event.VALUE_TRUE;
/**
*
* @author blj0011
*/
public class JSONParserTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
String jsonString = "{\n" +
" \"json\": {\n" +
" \"abc\": 0,\n" +
" \"def\": \"100\",\n" +
" \"ghi\": 1,\n" +
" \"jkl\": \"0000000000\",\n" +
" \"mno\": \"3\",\n" +
" \"pqr\": \"COLS, COMPLETE\",\n" +
" \"stu\": 2,\n" +
" \"vwx\": \"0000010000\",\n" +
" \"yz\": \"00\",\n" +
" \"a123\": 31,\n" +
" \"b123\": 1,\n" +
" \"c123\": \"1270\",\n" +
" \"d123\": \"2\",\n" +
" \"e123\": \"00\",\n" +
" \"f123\": 1,\n" +
" \"g123\": \"0000001000\"\n" +
" },\n" +
" \"_indexes\": {\n" +
" \"c123\": [\n" +
" \"1270\"\n" +
" ],\n" +
" \"h123\": [\n" +
" \"1270\"\n" +
" ]\n" +
" },\n" +
" \"_d\": false,\n" +
" \"_dd\": \"2017-09-12T12:03:53.716Z\",\n" +
" \"_op\": \"add\",\n" +
" \"_id\": 2\n" +
"},\n" +
"{\n" +
" \"json\": {\n" +
" \"abc\": 0,\n" +
" \"def\": \"100\",\n" +
" \"ghi\": 1,\n" +
" \"jkl\": \"0000000000\",\n" +
" \"mno\": \"3\",\n" +
" \"pqr\": \"COLS, COMPLETE\",\n" +
" \"stu\": 2,\n" +
" \"vwx\": \"0000010000\",\n" +
" \"yz\": \"00\",\n" +
" \"a123\": 31,\n" +
" \"b123\": 1,\n" +
" \"c123\": \"1270\",\n" +
" \"d123\": \"2\",\n" +
" \"e123\": \"00\",\n" +
" \"f123\": 1,\n" +
" \"g123\": \"0000001000\"\n" +
" },\n" +
" \"_indexes\": {\n" +
" \"c123\": [\n" +
" \"1270\"\n" +
" ],\n" +
" \"h123\": [\n" +
" \"1270\"\n" +
" ]\n" +
" },\n" +
" \"_d\": false,\n" +
" \"_dd\": \"2017-09-12T12:03:53.716Z\",\n" +
" \"_op\": \"add\",\n" +
" \"_id\": 2\n" +
"},\n" +
"{\n" +
" \"json\": {\n" +
" \"abc\": 0,\n" +
" \"def\": \"100\",\n" +
" \"ghi\": 1,\n" +
" \"jkl\": \"0000000000\",\n" +
" \"mno\": \"3\",\n" +
" \"pqr\": \"COLS, COMPLETE\",\n" +
" \"stu\": 2,\n" +
" \"vwx\": \"0000010000\",\n" +
" \"yz\": \"00\",\n" +
" \"a123\": 31,\n" +
" \"b123\": 1,\n" +
" \"c123\": \"1270\",\n" +
" \"d123\": \"2\",\n" +
" \"e123\": \"00\",\n" +
" \"f123\": 1,\n" +
" \"g123\": \"0000001000\"\n" +
" },\n" +
" \"_indexes\": {\n" +
" \"c123\": [\n" +
" \"1270\"\n" +
" ],\n" +
" \"h123\": [\n" +
" \"1270\"\n" +
" ]\n" +
" },\n" +
" \"_d\": false,\n" +
" \"_dd\": \"2017-09-12T12:03:53.716Z\",\n" +
" \"_op\": \"add\",\n" +
" \"_id\": 2\n" +
"}"; //I am guessing this is how your data looks.
List<Integer> positions = new ArrayList();
Pattern p = Pattern.compile("\\},\n\\{");//Find this pattern ***MAKE SURE THIS PATTERN IS CORRECT FOR YOU*** Your patter may be "\\},\\{"
Matcher m = p.matcher(jsonString);
while(m.find())
{
positions.add(m.start() + 1);//save starting position of the found pattern
}
System.out.println("# of positions: " + positions.size());
List<String> jsonStringObjects = new ArrayList();
if(positions.size() >= 1)
{
jsonStringObjects.add(jsonString.substring(0, positions.get(0)));//get first jsonString
//System.out.println(jsonString.substring(0, positions.get(0)));
jsonStringObjects.add(jsonString.substring(positions.get(positions.size() - 1) + 1));//get last jsonString
//System.out.println(jsonString.substring(positions.get(positions.size() - 1) + 1));
}
if(positions.size() >= 2 )
for(int i = 0; i < positions.size() - 1; i++)//get all jsonStrings between first and last
{
jsonStringObjects.add(jsonString.substring(positions.get(i) + 1, positions.get(i + 1)));
//System.out.println(jsonString.substring(positions.get(i) + 1, positions.get(i + 1)));
}
System.out.println("# of jsonStringObjects: " + jsonStringObjects.size());
int counter = 0;
for(String item : jsonStringObjects)
{
System.out.println("JSON Object #: " + ++counter);
try (JsonParser parser = Json.createParser(new StringReader(item))) {
while (parser.hasNext()) {
final Event event = parser.next();
switch (event) {
case KEY_NAME:
String key = parser.getString();
System.out.println("\t" + key);
break;
case VALUE_STRING:
String value = parser.getString();
System.out.println("\t" + value);
break;
case VALUE_NUMBER:
BigDecimal number = parser.getBigDecimal();
System.out.println("\t" + number);
break;
case VALUE_TRUE:
System.out.println("\t" + true);
break;
case VALUE_FALSE:
System.out.println("\t" + false);
break;
}
}
}
}
}
}
Output:
run:
# of positions: 2
# of jsonStringObjects: 3
JSON Object #: 1
json
abc
0
def
100
ghi
1
jkl
0000000000
mno
3
pqr
COLS, COMPLETE
stu
2
vwx
0000010000
yz
00
a123
31
b123
1
c123
1270
d123
2
e123
00
f123
1
g123
0000001000
_indexes
c123
1270
h123
1270
_d
false
_dd
2017-09-12T12:03:53.716Z
_op
add
_id
2
JSON Object #: 2
json
abc
0
def
100
ghi
1
jkl
0000000000
mno
3
pqr
COLS, COMPLETE
stu
2
vwx
0000010000
yz
00
a123
31
b123
1
c123
1270
d123
2
e123
00
f123
1
g123
0000001000
_indexes
c123
1270
h123
1270
_d
false
_dd
2017-09-12T12:03:53.716Z
_op
add
_id
2
JSON Object #: 3
json
abc
0
def
100
ghi
1
jkl
0000000000
mno
3
pqr
COLS, COMPLETE
stu
2
vwx
0000010000
yz
00
a123
31
b123
1
c123
1270
d123
2
e123
00
f123
1
g123
0000001000
_indexes
c123
1270
h123
1270
_d
false
_dd
2017-09-12T12:03:53.716Z
_op
add
_id
2
关于java - 解析复杂的 JSON 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46344761/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!