#java #json #arraylist
Вопрос:
Я прочитал весь файл JSON,но мне нужно прочитать значения из рейтинга ключей и сохранить в ArrayList, вот код, но он ничего не делает
ArrayList<Object> rates = new ArrayList<>();
FileReader read = new FileReader("C:\Users\User\eclipse-workspace\Task\files\reviews.json");
JSONParser parser = new JSONParser();
Object obj = parser.parse(read);
JSONObject jsonObject = new JSONObject();
jsonObject = (JSONObject) obj;
JSONArray reviews = new JSONArray();
reviews = (JSONArray) jsonObject.get("reviews");
Iterator<Entry> itr1 = reviews.iterator();
while (itr1.hasNext()) {
Map rate= ((Map)jsonObject.get("rating"));
Iterator<Entry> itr2 = ((JSONObject) itr1.next()).entrySet().iterator();
while (itr2.hasNext()) {
if(itr2.equals("rating")) {
rates.add(itr2);
Map.Entry pair = itr2.next();
System.out.println(rate);
}
}
}
Комментарии:
1. Откуда ты знаешь?
2. какова структура ваших данных json?
3. Вот JSON:«{ «отзывы»: [ { «идентификатор»: 2097047, «Идентификатор отзыва»: «93f131be27dc1122bb7ef0048ad10e4f», «Полный текст отзыва»: «5-звездочный отзыв», «Текст отзыва»: «5-звездочный отзыв», «numLikes»: 0, «numComments»: 0, «numShares»: 0, «рейтинг»: 5, «Отзыв создан»: «2 месяца назад»,
4.
JSONObject jsonObject = new JSONObject(); jsonObject = (JSONObject) obj;
в чем смысл созданияnew JSONObject();
, если вы немедленно откажетесь от него, переназначивjsonObject = (JSONObject) obj;
? Вместо этого просто напишитеJSONObject jsonObject = (JSONObject) obj;
. То же самое сJSONArray reviews = new JSONArray(); reviews = (JSONArray) jsonObject.get("reviews");
, просто напишитеJSONArray reviews = (JSONArray) jsonObject.get("reviews");
.5. В любом случае
Map rate= ((Map)jsonObject.get("rating"));
, выглядит не так. Как вы думаете, что здесь должно произойти (обратите внимание, чтоjsonObject
имеет место)?
Ответ №1:
Основываясь на том, что вы предоставили до сих пор, возможно, этот фрагмент кода даст вам некоторое представление:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// This will be what you have in your JSON file.
String content = "{n"
" "reviews": [n"
" {n"
" "id": 2097047,n"
" "reviewId": "93f131be27dc1122bb7ef0048ad10e4f",n"
" "reviewFullText": "5 star review",n"
" "reviewText": "5 star review",n"
" "numLikes": 0,n"
" "numComments": 0,n"
" "numShares": 0,n"
" "rating": 5,n"
" "reviewCreatedOn": "2 months ago"n"
" },n"
" {n"
" "id": 2097048,n"
" "reviewId": "123131be27dc1122bb7ef0048ad10e4f",n"
" "reviewFullText": "4 star review",n"
" "reviewText": "4 star review",n"
" "numLikes": 0,n"
" "numComments": 0,n"
" "numShares": 0,n"
" "rating": 4,n"
" "reviewCreatedOn": "3 months ago"n"
" }n"
" ]n"
"}";
JSONParser parser = new JSONParser();
List<Integer> rates = new ArrayList<>();
try {
JSONObject jsonObject = (JSONObject) parser.parse(content);
JSONArray jsonArray = (JSONArray) jsonObject.get("reviews");
for (Iterator<JSONObject> itr = jsonArray.iterator(); itr.hasNext();) {
JSONObject item = itr.next();
// do your stuff here for rating. I simply added it in the list right here.
rates.add(((Long) item.get("rating")).intValue());
}
} catch (ParseException e) {
// handle exception
}
Ответ №2:
Следуя вашему приглашению и вашему примеру кода, этот фрагмент кода может помочь вам
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.junit.jupiter.api.Test;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
public class TestQ68867649 {
@Test
void testQ68867649() throws IOException, ParseException {
ArrayList<Long> rates = new ArrayList();
FileReader read = new FileReader("C:\Users\User\eclipse-workspace\Task\files\reviews.json");
JSONParser parser = new JSONParser();
Object obj = parser.parse(read);
JSONObject jsonObject = (JSONObject) obj;
JSONArray reviews = (JSONArray) jsonObject.get("reviews");
for (Iterator<JSONObject> iterator = reviews.iterator(); iterator.hasNext(); ) {
JSONObject rate = iterator.next();
rates.add((Long) rate.get("rating"));
}
System.out.println("rates values: " rates);
}
}
примеры данных файла reviews.json на основе предоставленных вами данных
{
"reviews": [
{
"id": 2097047,
"reviewId": "93f131be27dc1122bb7ef0048ad10e4f",
"reviewFullText": "5 star review",
"reviewText": "5 star review",
"numLikes": 0,
"numComments": 0,
"numShares": 0,
"rating": 5,
"reviewCreatedOn": "2 months ago"
},
{
"id": 2097047,
"reviewId": "93f131be27dc1122bb7ef0048ad10e4f",
"reviewFullText": "5 star review",
"reviewText": "5 star review",
"numLikes": 0,
"numComments": 0,
"numShares": 0,
"rating": 3,
"reviewCreatedOn": "2 months ago"
}
]
}
База выходных данных на основе данных, используемых в качестве примера
rates values: [5, 3]
pom.xml файл
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>q68867649</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
ПРИМЕЧАНИЕ: этот пример был разработан с использованием Java 8 и Maven