首页 > 解决方案 > Gson 解析器由于空白字符而崩溃

问题描述

我有一个 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: "West Virginia") 不会;它应该是(州:“\”西弗吉尼亚州\“”)。可选地,键 'State' 可以有双引号,但这是可选的。

标签: javagson

解决方案


尝试将您的 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"
        }
    }
]

推荐阅读