Считывание ключа JSON : пара значений

#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