应为 BEGIN_ARRAY,但在第 1 行第 1 列路径为 STRING
Posted
技术标签:
【中文标题】应为 BEGIN_ARRAY,但在第 1 行第 1 列路径为 STRING【英文标题】:Expected BEGIN_ARRAY but was STRING at line 1 column 1 path 【发布时间】:2021-10-27 00:33:11 【问题描述】:我正在尝试从应用程序中传递 JSON 文件以填充一些视图并在应用程序中执行一些功能,但我不断收到此错误。
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
我已经阅读了以前关于类似主题的大部分答案,但没有一个解决方案适合我。
这是我传入我的 json 文件。
ArrayList<ControlProperty> controlProperty = new Gson().fromJson("json_file.json", new TypeToken<List<ControlProperty>>() .getType());
这是我的模型。
public class ControlProperty
private String type;
private String label;
private String name;
private String subtype;
private String dependency;
private String description;
private String placeholder;
private String dependencyType;
private String selectDependencyOption;
private int minlength;
private int maxlength;
private long maxSize;
private String pageType;
private String expectedFormat;
private String maxDate;
private String minDate;
然后是json结构
[
"type": "Head",
"label": "All fields are necessary.",
"subtype": "h1",
"dependency": "",
"controlId": "frmb-1557846206638-fld-1",
"currentDate": false,
"pageType": "new-page",
"headerSize": "s",
"isFieldDependent": false
,
"required": true,
"name": "text-1550823191761",
"type": "text_input",
"label": "Surname",
"minlength": "1",
"maxlength": "50",
"subtype": "text_input",
"dependency": "",
"controlId": "frmb-1557846206638-fld-2",
"currentDate": false,
"pushFieldLink": "surname",
"isFieldDependent": false,
,
"name": "text-1550823211048",
"type": "text_input",
"label": "Middle Name",
"minlength": "1",
"maxlength": "50",
"subtype": "text",
"dependency": "",
"controlId": "frmb-1557846206638-fld-3",
"currentDate": false,
"pushFieldLink": "middle_name",
"isFieldDependent": false,
]
【问题讨论】:
【参考方案1】:第一个问题:
以下字段在您的数据模型中定义为 int
,但您的 JSON 将其显示为字符串:minlength
和 maxlength
。
至于实际的Gson
转换:
-
我假设您将
json_file.json
替换为实际的 JSON 文件内容 - 文件名不会这样做。
对于 ArrayList 本身,试试这个:
ArrayList<ControlProperty> items = new ArrayList<>(Arrays.asList(new Gson().fromJson(jsonString, ControlProperty[].class)));
这会将 Json 字符串转换为 ControlProperty
类数组 (ControlProperty[]
) - 然后您只需将 array
添加到 ArrayList
中。
【讨论】:
这确实很有帮助,但是即使在更改了文件模型并以这种方式转换后,仍然会出现相同的错误 ``` ArrayList以及其他人对更改 ControlProperty
类中的属性类型的建议
InputStream is = loader.getResourceAsStream("input.json");
Reader reader = new InputStreamReader(is);
Type listType = new TypeToken<List<ControlProperty>>() .getType();
List<ControlProperty> posts = new Gson().fromJson(reader, listType)
【讨论】:
以上是关于应为 BEGIN_ARRAY,但在第 1 行第 1 列路径为 STRING的主要内容,如果未能解决你的问题,请参考以下文章
预期 BEGIN_ARRAY 但在第 1 行第 2 列是 BEGIN_OBJECT。如何解决?
预期BEGIN_ARRAY但在第1行第2列是BEGIN_OBJECT
获得错误预期BEGIN_ARRAY但在第1行第2列路径$是BEGIN_OBJECT
AsyncTask 预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY