Возникли проблемы при разборе JSON данных в NetBeans - PullRequest
1 голос
/ 25 марта 2020

(Я новичок в данных JSON, поэтому моя терминология может не соответствовать действительности) (Если вы не понимаете мой вопрос, прокомментируйте, пожалуйста, почему) Я беру JSON данные из API и сохраняю их в. json файл. Данные, которые поступают, форматируются следующим образом:

{
  "success": 1,
  "trails": [
    {
      "summary": "Grand, scenic views, begins fast \u0026 smooth, becomes very technical, epic singletrack.",
      "imgSmallMed": "https://cdn-files.apstatic.com/mtb/7000093_smallMed_1554393017.jpg",
      "latitude": 32.7071,
      "length": 10.3,
      "stars": 4.5,
      "type": "Ride",
      "starVotes": 2,
      "conditionDate": "1970-01-01 00:00:00",
      "difficulty": "black",
      "descent": -6257,
      "high": 9356,
      "ascent": 203,
      "conditionStatus": "Unknown",
      "low": 3303,
      "name": "Ash Creek",
      "location": "Swift Trail Junction, Arizona",
      "id": 7000218,
      "imgSqSmall": "https://cdn-files.apstatic.com/mtb/7000093_sqsmall_1554393017.jpg",
      "longitude": -109.9103
    },
    {
      "summary": "Roadside access and scenic views. Begins slow and smooth, then gets techy, followed by an adrenaline-pumping downhill!",
      "imgSmallMed": "",
      "latitude": 32.6626,
      "length": 3.1,
      "stars": 4,
      "type": "Ride",
      "starVotes": 1,
      "url": "https://www.mtbproject.com/trail/7050395/noon-creek-loop",
      "imgSmall": "",
      "imgMedium": "",
      "conditionDate": "1970-01-01 00:00:00",
      "difficulty": "black",
      "descent": -604,
      "high": 5711,
      "ascent": 585,
      "conditionStatus": "Unknown",
      "low": 5184,
      "name": "Noon Creek Loop",
      "location": "Swift Trail Junction, Arizona",
      "id": 7050395,
      "imgSqSmall": "",
      "longitude": -109.8013
    },
    {
      "summary": "Two short single tracks connected by old jeep trails with two excellent view points.",
      "imgSmallMed": "https://cdn-files.apstatic.com/mtb/7011629_smallMed_1554839996.jpg",
      "latitude": 32.6792,
      "length": 10.3,
      "stars": 3.5,
      "type": "Ride",
      "starVotes": 4,
      "conditionDate": "1970-01-01 00:00:00",
      "difficulty": "blue",
      "descent": -1127,
      "high": 9442,
      "ascent": 1130,
      "conditionStatus": "Unknown",
      "low": 8727,
      "name": "Grant Hill and Cunningham Trails",
      "location": "Swift Trail Junction, Arizona",
      "id": 3963377,
      "imgSqSmall": "https://cdn-files.apstatic.com/mtb/7011629_sqsmall_1554839996.jpg",
      "longitude": -109.8942
    }
  ]
}

Я пытался отсортировать эти данные и просто получить имя, широту, долготу и сложность каждого из объектов. То, что я хочу распечатать или сохранить в файле. json, это значение «имя», «сложность», «широта» и «долгота» для каждого из объектов.

Так что же Я хочу, чтобы это произошло, если я хочу go пройти через каждый объект в «следах», получить значения «name», «затруднение», «широта» и «долгота» и сохранить эти значения в текстовом файле. Таким образом, должно быть все oop, где код циклически перебирает каждый объект в «следах», захватывает и хранит значения «имя», «сложность», «широта» и «долгота». Но происходит то, что все значения в каждом объекте в «следах» (например, «сводка», «длина», «звезды») хранятся в одной строке (для каждого объекта) в текстовом файле или просто выводятся как одна строка в консоли. Мне нужно игнорировать некоторые из этих значений (например, игнорировать «сводка») и просто получить «имя», «сложность», «широта» и «долгота». А также иметь возможность хранить «имя», «сложность», «широту» и «долготу» в отдельных строках. (Надеюсь, это понятно). Это то, что следует сохранить из приведенных выше данных:

"latitude": 32.7071,
"difficulty": "black",    
"name": "Ash Creek",
"longitude": -109.9103
"latitude": 32.6626,
"difficulty": "black",
"name": "Noon Creek Loop",
"longitude": -109.8013
"latitude": 32.6792,
"difficulty": "blue",
"name": "Grant Hill and Cunningham Trails",
"longitude": -109.8942

Я могу отделить каждый объект, но не могу разобрать каждый объект и получить заданные значения c. Это код, над которым я работал:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class ReadJSON
{
    public static void main(String args[])
    {
        JSONParser parser = new JSONParser();
        try
        {
            Object object = parser.parse(new FileReader("trails6copy.json"));
            JSONObject jsonObject = (JSONObject)object;
            JSONArray trails = (JSONArray)jsonObject.get("trails");
            String sum = (String) trails.get(0);
            System.out.println(sum);
            for(Object trail : trails)
            {
                FileWriter writer = new FileWriter("trailSorter.txt",false);
                    writer.write(trail.toString());
                writer.close();     
            }
        }
        catch(FileNotFoundException fee)
        {
            fe.printStackTrace();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

ПОЖАЛУЙСТА, ПОМОГИТЕ !!! Я застрял на этой неделе !!

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Что вы делаете, это конвертируете весь объект в строку, вот почему вы получаете этот результат.

Вам нужно изменить foreach, который вы делаете. Я рекомендую использовать JSONObject вместо Object для доступа к элементам.

for(JSONObject trail : trails)
        {
            String line = "Name: " + trail.get("name") + "Difficulty: " + trail.get("difficulty"); //Add all the elements you want
            FileWriter writer = new FileWriter("trailSorter.txt",false);
                writer.write(trail.toString());
            writer.close();     
        }
0 голосов
/ 25 марта 2020

Вот рабочий код. Спасибо, Карлос Эстрада!

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class ReadJSONExample
{
    public static void main(String args[])
    {
        JSONParser parser = new JSONParser();
        try
        {
            Object object = parser.parse(new FileReader("trails6copy.json"));


            //convert Object to JSONObject
            JSONObject jsonObject = (JSONObject)object;
            JSONArray trails = (JSONArray)jsonObject.get("trails");
            //String sum = (String) trails.get(0);
            //System.out.println(sum);
            for (Iterator it = trails.iterator(); it.hasNext();) {
                JSONObject trail = (JSONObject) it.next();
                String line = "Name: " + trail.get("name") + "Difficulty: " + trail.get("difficulty"); //Add all the elements you want
                try (FileWriter writer = new FileWriter("trailSorter.txt",false)) {
                    writer.write(line.toString());
                }     
            }


        }
        catch(FileNotFoundException fe)
        {
            fe.printStackTrace();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...