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

JavaScript无法从Java解析用Gson序列化的字符串[重复]

阎佑运
2023-03-14

最小代码如下:

import java.util.*;
import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

class LOV {
    List<String> values;

    public LOV(List<String> values) {
        this.values = values;
    }
}

public class FooMain {

    private static final Gson gson = new GsonBuilder().serializeNulls().create();

    @SuppressWarnings("unchecked")
    public static <T> T fromJson(String json, Class<T> classOfT) {
        T target = (T) gson.fromJson(json, (Type) classOfT);
        return target;
    }

    public static void main(String args[]) {
        List<String> values = new ArrayList<>();
        values.add("\"foo\"");
        LOV lov = new LOV(values);
        String s = gson.toJson(lov);
        System.out.printf("Stringified JSON is: [%s]\n", s);
        LOV lov2 = fromJson(s, LOV.class);
    }
}

…上面的代码表明序列化和反序列化是可能的,并且有效。我还为LOV类编写了一个equals方法,以确定重新内部化的对象(lov2)与最初序列化的对象相等(事实上,我只是跳过这段代码以保持简短)。

上面的代码打印在控制台上:

Stringified JSON is: [{"values":["\"foo\""]}]
JSON.parse('{"values":["\"foo\""]}');
Uncaught SyntaxError: Unexpected token f in JSON at position 13(…)
s.replace("\\", "\\\\")
s.replace("\"", "\\\"")
s.replace("'", "\\'")
JSON.parse('the string literal prepared by Java'.replace(/\t/g, "\\t"));

这是有效的,但越来越复杂,我不确定我已经涵盖了所有的情况,所以最后我只是使用了StringEscapeEutils.EscapeEcmaScript,它就像一个魅力一样有效。使用escapeecmaScript,在JavaScript端使用一个简单的json.parse(“Java准备的字符串文字”)就足够了。

共有1个答案

穆智刚
2023-03-14

JavaScript的json.parse需要使用双反斜杠。这应该有效:

json.parse('{“values”:[“\\”foo\\“”]}');

这是因为您还需要转义反斜杠。

 类似资料:
  • 我有一个Android应用程序,与Spring开发的RESTAPI联系。应用程序很好地序列化了一个对象,但是Spring应用程序在每个字段不为null时将其解析为null。有什么不对劲?我该怎么办? 这是REST API方法签名:cambioPassword(@quiestHeader(授权)字符串头,PasswordChange userData) 注意:应用程序和API都使用Gson(我没有在

  • 问题内容: 所有,我都有以下输出/字符串(它是JIRA API的响应): 我用于遍历元素并获取值。我在下面的“嵌套对象”示例中编写了类 http://www.javacreed.com/gson-deserialiser- example/ 我能够获得到第二级的元素值。例如:在此级别之前,我能够获得的值以及其他值。我如何获得的价值? 我应该如何构造我的解串器和类。请协助。谢谢。 问题答案: 试试这

  • 使用Spring1.5.8释放Jackson mapper,给出以下异常。 在[源:未知;行:-1,列:-1](通过引用链:com.copart.conversationapi.CallDisposition.model.vo.CallLogEntity[“CallEndTime”]) Callentity.java java pom.xml

  • 有没有一种通用的方法告诉Gson不要写空字符串? 我非常不喜欢实现一个TypeAdapter,它可以像这里的答案所暗示的那样处理每个字段。

  • 我的日期格式为“yyyy-mm-dd't'hh:mm:ss.sssz”。例如日期为“2018-07-17T09:59:51.312Z”。我正在使用下面的代码解析Java中的字符串。

  • 这不是一个重复的问题,请不要标记为重复。这个Json可以用GSON库解析吗?