当前位置: 首页 > 知识库问答 >
问题:

在java中解析字符串时出现异常

徐隐水
2023-03-14

我有一个代表学生实体的字符串:

{\"firstName\":\"Pirlog\",\"lastName\":\"Marcel\",\"year\":3,\"grupa\":\"B4\",\"accountId\":\"c9e4b165-8fdd-4ca2-974e-9b598ddb52bc\",\"id\":\"e577cf18-53bb-4e4e-bce2-b543f1d51f85\"}

学生实体类是:

public class Student implements Serializable {
    private String firstName;
    private String lastName;
    private int year;
    private String grupa;
    private UUID accountId;
    private UUID id;

    public Student(){

    }

    public Student(String firstName, String lastName, int year, String grupa, String accountId, String id){
        this.id = UUID.fromString(id);
        this.firstName = firstName;
        this.lastName = lastName;
        this.year = year;
        this.grupa = grupa;
        this.accountId = UUID.fromString(accountId);
    }
}

对于解析字符串,我使用以下代码:

Gson g = new Gson();
String p = g.toJson(response1);
Student s = g.fromJson(p.substring(1, p.length() - 1), Student.class);
System.out.println(s.toString());

响应1是一个httpresponse的主体,它代表我来自描述的字符串。

例外情况:

Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
    at com.google.gson@2.8.6/com.google.gson.Gson.fromJson(Gson.java:947)
    at com.google.gson@2.8.6/com.google.gson.Gson.fromJson(Gson.java:897)
    at com.google.gson@2.8.6/com.google.gson.Gson.fromJson(Gson.java:846)
    at com.google.gson@2.8.6/com.google.gson.Gson.fromJson(Gson.java:817)
    at Marcel/Marcel.controllers.uicontrollers.LoginScreenController.LoginFunction(LoginScreenController.java:42)

共有2个答案

蒲功
2023-03-14

换掉这个

Gson g = new Gson();
            String p = g.toJson(response1);
            Student s = g.fromJson(p.substring(1, p.length() - 1), Student.class);
            System.out.println(s.toString());

具有

Gson g = new Gson();
        Reader reader = new StringReader(response1);
        Student s = g.fromJson(reader, Student.class);
        System.out.println(s.toString());
凌恩
2023-03-14

gson的gson错误表明您给它的是格式错误的JSON字符串,因此需要检查的是您的JSON。

在这一行中,您将从JSON中删除大括号:

Student s = g.fromJson(p.substring(1, p.length() - 1), Student.class);

不要这样做;这些支架是必需的。另一个问题可能是,JSON中有一些反斜杠来转义双引号。可能是因为您将JSON转移到问题中的方式,但在将字符串传递到gson之前,您应该过滤掉它们。

看看这里,同样的问题也在讨论中。

 类似资料:
  • 当我尝试解析到时,我得到了异常。我的Android API版本是19。 下面是要分析的字符串:

  • 我正试图通过使用以下方法来取消加密字符串,但遇到了异常。 我试图将我的加密字符串发送到下面的方法,但它不能得到Byte[],在将字符串转换为Byte[]时得到数字格式异常。 请建议。

  • 我正在尝试在java中解析JSON字符串以单独打印单个值。但是在运行程序时,我得到了以下错误- 我的班级看起来像- 让我知道我遗漏了什么,或者每次运行应用程序时都会出现错误的原因。如有任何意见,将不胜感激。

  • 问题内容: 我有一个日期时间字符串,我不知道如何在Python中解析它。 字符串是这样的: 我试过了 但是Python引发 根据Python文档: %z UTC偏移量,格式为+ HHMM或-HHMM(如果对象是天真对象,则为空字符串)。 解析此时间字符串的正确格式是什么? 问题答案: 时区解析有问题。看一下包装:

  • 问题内容: 假设我提供了一个类似于或类似此字符串的字符串(带有数字和小数点以及一些分隔符,例如或或其他不可预测的字符串)。我需要编写一个方法,该方法接受像上面的参数一样的参数,并分别返回像或的String 。 您能否建议最有效,最易读的代码来实现这一目标? 注意:我知道要遍历每个索引,并检查它的重调谐器是否存在,或者 我正在效率和可读性方面寻找更优化的解决方案 谢谢。 问题答案: 这将删除任何不是

  • 问题内容: 在Java中执行以下操作的最佳方法是什么。我有两个输入字符串 我需要从字符串中提取类型和数字。 在这种情况下,答案是type =“ a good”和number =“ 234” 谢谢 问题答案: 您可以使用正则表达式: