Проверьте области ‘nextTo’ в Java

#java

#java

Вопрос:

‘NextTo’ указывает, какие регионы. Застрял при синтаксическом анализе.

Комментарии:

1. Просто небольшая подсказка для последнего раздела вашего кода. Вам не нужно проверять, является ли это true или false, просто верните значение сравнения, оно будет выглядеть следующим образом: return (nextTo[region1] == region2); Этот оператор return возвращает либо true, либо false.

Ответ №1:

Да, ваш псевдокод — правильный путь. Начните с десериализации вашей строки JSON с помощью Jackson (найдите подходящую «модель», например, nextTo может быть сопоставлена с Map<Integer, List<Integer>> ), затем реализуйте свой псевдокод.

Комментарии:

1. Спасибо за помощь, не могли бы вы показать мне пример, я очень новичок в этом языке

Ответ №2:

Десериализуйте объект, используя org.json,

 import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;



public class DesrialiseJSON {

    public static void main(String[] args) {
        JSONParser parser = new JSONParser();
        //json string
        String stringToParse="{"Regions" : [{"regionId" : 5,"name" : "South Korea"},{"regionId" : 6,"name" : "North Korea"},{ }],"nextTo" : { "5" : [6], "6" : [5]}}";
        try {
            //convert to json object
            JSONObject json = (JSONObject) parser.parse(stringToParse);
            System.out.println(checkNextTo(json));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    public static boolean checkNextTo(JSONObject json) {
        //regions array
        JSONArray regionArr=(JSONArray) json.get("Regions");

        // Find the id of region1 in the "region" part of the JSON
        long regionId1=(Long) ((JSONObject) regionArr.get(0)).get("regionId");
        // Find the id of region2 in the "region" part of the JSON
        long regionId2=(Long) ((JSONObject) regionArr.get(1)).get("regionId");

        JSONObject nextTo=(JSONObject) json.get("nextTo");

        Long nextToReg1=(Long) ((JSONArray) nextTo.get(String.valueOf(regionId1))).get(0);
        Long nextToReg2=(Long) ((JSONArray) nextTo.get(String.valueOf(regionId2))).get(0);

        // Check region1's nextTo regions in the "nextTo" section ofJSON
        // If region2 id is in region1 id's nextTo {
        //return True 
        // Else

        return regionId1==nextToReg2 || regionId2==nextToReg1;


    }

}
  

Комментарии:

1. Спасибо за помощь, файл json уже импортирован, поэтому не нужно разбирать в строку, как я могу использовать ваш пример, ссылаясь на файл json

2. Я просто проанализировал, чтобы получить JSONObject . Если у вас это уже есть, тогда вызовите checkNextTo(json) метод.

3. работает, но regionArr.get(0)).get(«id») будет работать только для 1-5 целых чисел,

4. @MikeM почему 1-5? У меня нет места, где жестко закодированы эти значения. Это должен был быть принятый ответ.