gpt4 book ai didi

java - JSON 字符串无法转换为数组/ArrayList

转载 作者:行者123 更新时间:2023-12-02 03:30:02 24 4
gpt4 key购买 nike

[
{
countryCode: "CN",
countryCallingCode: "+86",
codeRule: "^1\d{10}$"
},
{
countryCode: "US",
countryCallingCode: "+1",
codeRule: "^\d{10}$"
}
]

所以我在 Kotlin 中这样定义模型

data class CountryCallingCode(
val countryCode: String,
val countryCallingCode: String,
val codeRule: String? = null
)

这是后端文档定义响应的内容。codeRule 是用于验证电话号码的正则表达式。

我坚持将字符串转换为列表。

我将它们粘贴到 Android Studio,它显示如下:

String response = "[\n" +
" {\n" +
" countryCode: \"CN\",\n" +
" countryCallingCode: \"+86\",\n" +
//" codeRule: \"^1\\d{10}$\"\n" +
" },\n" +
" {\n" +
" countryCode: \"US\",\n" +
" countryCallingCode: \"+1\",\n" +
//" codeRule: \"^\\d{10}$\"\n" +
" }\n" +
"]";

以下代码不起作用。

转换代码1:

Gson gson = new Gson()
CountryCallingCode[] countryCallingCodeList = gson.fromJson(response, CountryCallingCode[].class);

我认为下面的代码是相同的,如果我错了,请纠正我。

转换代码2:

ArrayList<CountryCallingCode> countryCallingCodeList = (ArrayList<CountryCallingCode>)gson.fromJson(response, ArrayList.class);

转换代码3

Gson gson = new Gson();
Type type = new TypeToken<List<CountryCallingCode>>() {
}.getType();
List<CountryCallingCode> countryCallingCodeList = gson.fromJson(response, type);

然后我使用 https://jsoneditoronline.org/重新格式化我的 json。

JsonString with codeRule online check error JsonString without codeRule online check error

我尝试删除codeRule,并粘贴到Android Studio,它也告诉我我错了,它显示CountryCode导致SyntaxException。

    String reponse = "[\n" +
" {\n" +
" countryCode: \"CN\",\n" +
" countryCallingCode: \"+86\"\n" +
" },\n" +
" {\n" +
" countryCode: \"US\",\n" +
" countryCallingCode: \"+1\"\n" +
" }\n" +
"]";

只有我将jsonstring压缩为oneline,我才能将jsonstring转换为数组/ArrayList。

String response = "[{\"countryCode\":\"CN\",\"countryCallingCode\":\"+86\"},{\"countryCode\":\"US\",\"countryCallingCode\":\"+1\"}]";

有谁知道吗

  • 问题一:

如何处理codeRule?

  • 第二个问题:

为什么我无法将原始 JsonString 粘贴到 Android Studio 中?

为什么我必须将 JsonString 压缩为一行字符串?

更新:

原始一行json字符串:

[{"countryCode":"CN","countryCallingCode":"+86", codeRule: "^1\d{10}$"},{"countryCode":"US","countryCallingCode":"+1", codeRule: "^\d{10}$"}] 

粘贴结果 json 字符串:

String response = "[{\"countryCode\":\"CN\",\"countryCallingCode\":\"+86\", codeRule: \"^1\\d{10}$\"},{\"countryCode\":\"US\",\"countryCallingCode\":\"+1\", codeRule: \"^\\d{10}$\"}]";

代码:

Gson gson = new Gson();

/* Convertion 1 */
CountryCallingCode[] countryCallingCodeList = gson.fromJson(response, CountryCallingCode[].class);

错误:

result = {JsonSyntaxException@7237} Method threw 'com.google.gson.JsonSyntaxException' exception.
cause = {MalformedJsonException@7241} "com.google.gson.stream.MalformedJsonException: Invalid escape sequence at line 1 column 65 path $[0].codeRule"
detailMessage = "com.google.gson.stream.MalformedJsonException: Invalid escape sequence at line 1 column 65 path $[0].codeRule"
stackState = null
stackTrace = {StackTraceElement[28]@7243}
suppressedExceptions = {Collections$EmptyList@7244} size = 0
shadow$_klass_ = {Class@1694} "class com.google.gson.JsonSyntaxException"
shadow$_monitor_ = -2082115852

最佳答案

这更像是一条评论,而不是一个答案,但我需要更多的空间来解释 - 如果您的 Java 版本支持它,您可以尝试使用如下原始字符串创建响应:

String response = `[
{
countryCode: "CN",
countryCallingCode: "+86",
codeRule: "^1\d{10}$"
},
{
countryCode: "US",
countryCallingCode: "+1",
codeRule: "^\d{10}$"
}
]`

或者如果可能的话,使用 Kotlin,它使用 """ 来分隔原始字符串。它将更具可读性,并且可以帮助您发现错误

关于java - JSON 字符串无法转换为数组/ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890415/

24 4 0