Пишу парсер json на Java с использованием библиотеки json-Simple. Нужно вытащить данные из URL.
Получаю такой json с URL (здесь лишь начало, сам файл очень длинный):
null {
"pagelen": 10,
"values": [{
"description": "Quads/hexes need ordering too; see\r\nhttps://bitbucket.org/fenics-project/dolfin/issues/997/. We are not able\r\nto ensure ordering by simple local operation. Hence we at least check if\r\ncell is ordered (like the one from unit square/cube mesh) otherwise\r\nraise.",
"links": {
"decline": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/decline"
},
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/commits"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/comments"
},
"merge": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/merge"
},
"html": {
"href": "https://bitbucket.org/fenics-project/dolfin/pull-requests/476"
},
"activity": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/activity"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/diff"
},
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/approve"
},
"statuses": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests/476/statuses"
}
},
"title": "Mock ordering check for quads/hexes",
"close_source_branch": false,
"merge_commit": null,
"destination": {
"commit": {
"hash": "bd2529300256",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/commit/bd2529300256"
}
}
},
"repository": {
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin"
},
"html": {
"href": "https://bitbucket.org/fenics-project/dolfin"
},
"avatar": {
"href": "https://bitbucket.org/fenics-project/dolfin/avatar/32/"
}
},
"type": "repository",
"name": "DOLFIN",
"full_name": "fenics-project/dolfin",
"uuid": "{40187f2d-daf4-48d4-9479-3239aba29831}"
},
"branch": {
"name": "master"
}
},
"state": "OPEN",
"closed_by": null,
"summary": {
"raw": "Quads/hexes need ordering too; see\r\nhttps://bitbucket.org/fenics-project/dolfin/issues/997/. We are not able\r\nto ensure ordering by simple local operation. Hence we at least check if\r\ncell is ordered (like the one from unit square/cube mesh) otherwise\r\nraise.",
"markup": "markdown",
"html": "<p>Quads/hexes need ordering too; see\n<a href=\"https://bitbucket.org/fenics-project/dolfin/issues/997/\" rel=\"nofollow\">https://bitbucket.org/fenics-project/dolfin/issues/997/</a>. We are not able\nto ensure ordering by simple local operation. Hence we at least check if\ncell is ordered (like the one from unit square/cube mesh) otherwise\nraise.</p>",
"type": "rendered"
},
"source": {
"commit": {
"hash": "e6db78d11122",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/commit/e6db78d11122"
}
}
},
"repository": {
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin"
},
"html": {
"href": "https://bitbucket.org/fenics-project/dolfin"
},
"avatar": {
"href": "https://bitbucket.org/fenics-project/dolfin/avatar/32/"
}
},
"type": "repository",
"name": "DOLFIN",
"full_name": "fenics-project/dolfin",
"uuid": "{40187f2d-daf4-48d4-9479-3239aba29831}"
},
"branch": {
"name": "jan/fix-issue-997"
}
},
"comment_count": 1,
"author": {
"username": "blechta",
"display_name": "Jan Blechta",
"type": "user",
"uuid": "{fd86b991-5682-4e96-9036-11095a65840f}",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/blechta"
},
"html": {
"href": "https://bitbucket.org/blechta/"
},
"avatar": {
"href": "https://bitbucket.org/account/blechta/avatar/32/"
}
}
},
"created_on": "2018-05-27T22:41:56.033863+00:00",
"reason": "",
"updated_on": "2018-05-29T15:58:27.284462+00:00",
"type": "pullrequest",
"id": 476,
"task_count": 0
}, {
Видно что в файле есть массив "values". В этом массиве есть данные, например "description" или "id". Это понятно. Мне их получилось вытащить.
Но дальше мы видим, что там еще есть, в массиве "values", другие массивы. Здесь меня интересует массив "author" (в самом конце). Я пытался вывести данные из этого массива, а в частности "username". Но не получается.
Вот код, который я пытаюсь привести в работающий вид:
String urlName;
urlName = "https://api.bitbucket.org/2.0/repositories/fenics-project/dolfin/pullrequests";
URL url = new URL(urlName);
try {
BufferedReader bufferedReaderMain = new BufferedReader(new InputStreamReader(url.openStream()));
BufferedReader bufferedReaderValuesArray = new BufferedReader(new InputStreamReader(url.openStream()));
String jsonDataAsStringMain = "";
String jsonDataAsStringValuesArray = "";
JSONParser parserForJsonMain = new JSONParser();
JSONParser parserForJsonValuesArray = new JSONParser();
while (null != (jsonDataAsStringMain = bufferedReaderMain.readLine())) {
//System.out.println(str);
JSONObject jsonObjectMain = (JSONObject)parserForJsonMain.parse(jsonDataAsStringMain);
JSONArray jsonArrayMain = (JSONArray)jsonObjectMain.get("values");
for (Object obj : jsonArrayMain) {
JSONObject valuesOfMainArray = (JSONObject) obj;
Long id = (Long) valuesOfMainArray.get("id");
System.out.println("PR ID : " + id);
String title = (String) valuesOfMainArray.get("title");
System.out.println("Title : " + title);
while (null!=(jsonDataAsStringValuesArray=bufferedReaderValuesArray.readLine())){
//System.out.println(jsonDataAsStringValuesArray);
JSONObject jsonObjectValues = (JSONObject)parserForJsonValuesArray.parse(jsonDataAsStringValuesArray);
JSONArray jsonArrayValues = (JSONArray)jsonObjectValues.get("author");
for (Object t : jsonArrayValues) {
JSONObject valuesOfValuesArray = (JSONObject) t;
String username = (String) valuesOfValuesArray.get("username");
System.out.println("Username : " + username);
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
При компилировании получаю:
PR ID : 476
Title : Mock ordering check for quads/hexes
Exception in thread "main" java.lang.NullPointerException at connection.ConnectionToHTTP.main(ConnectionToHTTP.java:46)
То есть выводится корректно "id" и "title". но выдает ошибку на строке:
for (Object t : jsonArrayValues) {
Вопрос, как вывести данные из массива, которые находятся в массиве?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости