Как можно извлечь данные из приведённого ниже JSON?

Я настраиваю сниппеты в SoraEditor и планирую хранить их для каждого языка в формате JSON в папке assets. Для загрузки ассетов использую assets++. Можете помочь мне парсить следующий JSON? <br/> <pre><code class="javascript">[
  {
    "prefix": "for",
    "body": [
      "for(int i=0; i&lt;count; i++) {",
      "}"      
    ],
    "description": "for loop",
    "length": 1
  },
  {
    "prefix": "foreach",
    "body": [
      "for(Object obj: arr) {",
      "}"      
    ],
    "description": "foreach loop",
    "length": 1
  },
]</code></pre> <br/> Мне нужно представить его в виде массива объектов указанного класса: <br/> <pre><code class="java">public static class Snippet {
        @SerializedName("prefix")
        public String prefix;

        @SerializedName("body")
        public String[] body;

        @SerializedName("description")
        public String description;

        @SerializedName("length")
        public int length;

        public Snippet(String prefix, String[] body, String description, int length) {
            this.prefix = prefix;
            this.body = body;
            this.description = description;
            this.length = length;
        }
    }
//Я уже пробовал использовать Gson для этого.</code></pre> <br/> <br/> JSON подходит для хранения таких данных, и мне нужно правильно его обработать.
  • 26 ноября 2024 г. 3:53
Ответы на вопрос 2
Чтобы извлечь данные из данного JSON в Java с использованием библиотеки Gson, вам нужно сделать несколько шагов.

1. **Подключите библиотеку Gson**: Убедитесь, что у вас есть Gson в вашем проекте. Если вы используете Maven, добавьте в ваш `pom.xml`:

   ```xml
   <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <version>2.8.9</version> <!-- Используйте актуальную версию -->
   </dependency>
   ```

2. **Преобразуйте JSON в массив объектов класса Snippet**: Вы можете сделать это следующим образом:

   ```java
   import com.google.gson.Gson;
   import com.google.gson.reflect.TypeToken;

   import java.lang.reflect.Type;
   import java.util.List;

   public class Main {
       public static void main(String[] args) {
           String json = "[{" +
                   "\"prefix\": \"for\"," +
                   "\"body\": [\"for(int i=0; i<count; i++) {\", \"}\"]," +
                   "\"description\": \"for loop\"," +
                   "\"length\": 1" +
                   "}," +
                   "{" +
                   "\"prefix\": \"foreach\"," +
                   "\"body\": [\"for(Object obj: arr) {\", \"}\"]," +
                   "\"description\": \"foreach loop\"," +
                   "\"length\": 1" +
                   "}]";

           Gson gson = new Gson();
           Type snippetListType = new TypeToken<List<Snippet>>(){}.getType();
           List<Snippet> snippets = gson.fromJson(json, snippetListType);

           // Пример вывода
           for (Snippet snippet : snippets) {
               System.out.println("Prefix: " + snippet.prefix);
               System.out.println("Description: " + snippet.description);
               System.out.println("Body: ");
               for (String line : snippet.body) {
                   System.out.println("  " + line);
               }
               System.out.println("Length: " + snippet.length);
               System.out.println();
           }
       }

       public static class Snippet {
           @SerializedName("prefix")
           public String prefix;

           @SerializedName("body")
           public String[] body;

           @SerializedName("description")
           public String description;

           @SerializedName("length")
           public int length;

           public Snippet(String prefix, String[] body, String description, int length) {
               this.prefix = prefix;
               this.body = body;
               this.description = description;
               this.length = length;
           }
       }
   }
   ```

В этом коде:

- Мы определяем JSON как строку.
- Создаем экземпляр `Gson`.
- Используем `fromJson` для преобразования JSON в список объектов `Snippet`.
- Затем, просто выводим данные для проверки.

Убедитесь, что JSON имеет корректный формат. В вашем примере присутствует лишняя запятая после последнего объекта, что может вызвать ошибку. Исправьте это, удалив запятую, чтобы JSON выглядел так:

```json
[
  {
    "prefix": "for",
    "body": [
      "for(int i=0; i<count; i++) {",
      "}"      
    ],
    "description": "for loop",
    "length": 1
  },
  {
    "prefix": "foreach",
    "body": [
      "for(Object obj: arr) {",
      "}"      
    ],
    "description": "foreach loop",
    "length": 1
  }
]
```

Теперь вы сможете успешно парсить JSON и работать с данными в формате объектов вашего класса `Snippet`.
var jsonArray = """
                 [
                   {
                     "prefix": "for",
                     "body": [
                       "for(int i=0; i<count; i++) {",
                       "}"     \s
                     ],
                     "description": "for loop",
                     "length": 1
                   },
                   {
                     "prefix": "foreach",
                     "body": [
                       "for(Object obj: arr) {",
                       "}"     \s
                     ],
                     "description": "foreach loop",
                     "length": 1
                   },
                 ]
                """;

        var snippetsListType = new TypeToken<ArrayList<Snippet>>(){}.getType();
        var snippets = new Gson().fromJson(jsonArray, snippetsListType);
Похожие вопросы