Сбой парсера Gson из-за пустого символа - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть файл в формате JSON. Анализатор Gson аварийно завершает работу, когда в нем встречается пробел, как в State = "West Virginia", но он может анализировать "West-Virginia", где заменяется пустой символ. Я использую BufferedReader в Java.

Но если я передаю ту же строку в жестком коде, синтаксический анализатор работает.

import java.io.* ;

import com.google.gson.*;

public class gson_test {
    public static void main(String[] args)  throws FileNotFoundException {
        // TODO Auto-generated method stub
        BufferedReader br2 = null ;
        String jsonStr =  "[{month = august, weather:clear}, [333] , {addr : {place = {city = city_name, county : its_name}, state = \"West Virginia\" } } ]" ;
        // System.out.printf("json-str : %s \n", jsonStr);
        GsonParseStr(jsonStr, (JsonElement) null );
        try  {
            String file2read_json = "c:\\enter\\filename\\here";  
            br2 = new BufferedReader(new FileReader(file2read_json));
            // https://sites.google.com/site/gson/gson-user-guide#TOC-Array-Examples
            Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
            Object obj2 = gson.fromJson(br2, Object.class); // parses json-str into an object
            GsonParseStr(obj2.toString(), (JsonElement) null );
        }  catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
            if (br2 != null)  {
                br2.close();
            }

            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    static void GsonParseStr(String jsonStr, JsonElement elem)  {
        JsonParser parser2 = new JsonParser();
        elem = parser2.parse(jsonStr);   // this stmt crashes for the blank char 
        System.out.printf("parse str : %s \n", jsonStr);

    }
}

Содержимое моего файла:

[{month = august, weather:clear}, [333] , {addr : {place = {city = city_name, county : its_name}, state = "West.Virginia" } } ]

Если я изменю «West.Virginia» на «West Virginia», программа вылетает.

Файл должен анализироваться так же, как «содержимое файла в виде необработанной строки».

PS: Как предлагает JPinzon, мне нужны цитаты вокруг (Западная Вирджиния) в файле, который у меня был. Но они должны быть в дальнейшем сбежали. Таким образом: (штат: «Западная Вирджиния») не подойдет; так и должно быть (штат: "\" Западная Вирджиния \ ""). При желании ключ State может иметь двойные кавычки, но это не обязательно.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Попробуйте исправить свой JSON следующим образом:

[{"month":"august", "weather":"clear"}, [333], {"addr":{"place":{"city":"city_name", "county":"its_name"}, "state":"West Virginia"}}]

... или красиво отформатировано:

[
    {
        "month":"august",
        "weather":"clear"
    },
    [
        333
    ],
    {
        "addr":{
            "place":{
                "city":"city_name",
                "county":"its_name"
            },
            "state":"West Virginia"
        }
    }
]
0 голосов
/ 05 апреля 2019

Если вы выполните отладку, вы увидите, что строка obj2.toString() не содержит кавычек вокруг "Западной Вирджинии", поскольку gson.fromJson(br2, Object.class) удалила их во время анализа.Вот почему он дает сбой.

Чтобы избежать этой ошибки, вы можете попробовать добавить экранированные кавычки в ваш файл, например, state = "\"West Virginia\""

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...