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

如何在Java中将一般对象序列化为Json并将Json反序列化为该对象

井浩思
2023-03-14

有没有办法将一般对象序列化为Json并将Json反序列化为对象<如果对象是一个实体,我可以使用Jackson 2库来实现这个目的<但是如果对象是一个普通类,我该怎么做呢?

例如,我想序列化com.datastax.driver.core.querybuilder。将更新为Json并保存到DB,然后搜索并反序列化它以更新对象,最后将其用作com.datastax.driver.core.Session的参数。执行(语句)以执行。

是否可以复制更新对象?

补充:

我真正的目的是存储Update然后检索并执行它。所以我想我可以将其保存为JSON String,然后将其检索并反序列化为原始的Update实例并执行它。如果不是一个好方法,我如何存储Update然后检索并执行它?
虽然我可以存储Update文本查询以及检索并执行文本查询,但Update中的一些其他信息可能会丢失,例如ConistencyLevel

共有3个答案

乐正瑞
2023-03-14

org.json提供了一个简单的API来处理json。有一种方法可以基于类的getter创建类实例的JSONObject。例如:

public class MyClass{
    private int id;
    private String name,

    public MyClass(int id_, String name_) {
        this.id = id_;
        this.name = name_;
    }

    public int getId() { return this.id; }
    public int getName() { return this.name; }

    //Create a JSONObject with a key-value for each getter of your class
    public JSONObject toJson(){
        return new JSONObject(this);
    }
}

然后,在您的代码中:

MyClass obj = new MyClass(1, "doe");
JSONObject json = obj.toJson();
System.out.println(json.toString());
// -> print : {"id":1,"name":"doe"}

API还提供了不同的解析器,您可以使用提供的JSONObject对类的构造函数进行编码:

public MyClass(JSONObject json){
     this.id= json.getInt("id");
     this.name= json.getString("name");
}

完整文档:org.json官方文档

罗安宁
2023-03-14

在最坏的情况下,您总是可以考虑创建自己的自定义(反)序列化程序代码。

看这里或那里进一步阅读。

含义:您可以查看您打算“序列化”的类的实现;然后编写适用于该实现的代码。

对第三方代码这样做的主要缺点是:现在必须跟踪对该第三方代码的更改;例如,对该更新类的更改可能很容易破坏您的自定义(反)序列化程序代码。

傅正豪
2023-03-14

只需转换QueryBuilder。使用方法将更新为字符串

如果要存储、检索和执行QueryBuilder。更新查询,您不必将其序列化和反序列化为json。

String query = QueryBuilder.update("exp").with(QueryBuilder.set("data", "This is a test data")).toString();
//Now you can store the text query directly to cassandra
//And retrieve the text query
session.execute(query); //Execute the query

这是toString()的代码

@Override
public String toString() {
    try {
        if (forceNoValues)
            return getQueryString();
        // 1) try first with all values inlined (will not work if some values require custom codecs,
        // or if the required codecs are registered in a different CodecRegistry instance than the default one)
        return maybeAddSemicolon(buildQueryString(null, CodecRegistry.DEFAULT_INSTANCE)).toString();
    } catch (RuntimeException e1) {
        // 2) try next with bind markers for all values to avoid usage of custom codecs
        try {
            return maybeAddSemicolon(buildQueryString(new ArrayList<Object>(), CodecRegistry.DEFAULT_INSTANCE)).toString();
        } catch (RuntimeException e2) {
            // Ugly but we have absolutely no context to get the registry from
            return String.format("built query (could not generate with default codec registry: %s)", e2.getMessage());
        }
    }
}

您可以看到它返回了实际的查询字符串

 类似资料:
  • 问题内容: 我在使用AJAX访问的Java服务器应用程序中有一个字符串。它看起来像以下内容: 当从服务器提取字符串时,是否有一种简单的方法可以将其转换为活动的JavaScript对象(或数组)?还是我必须手动拆分字符串并手动构建对象? 问题答案: 现代浏览器支持。 在不浏览器,您可以包括在库中。

  • 问题内容: 如何在JavaScript中将对象序列化为JSON? 问题答案: 您正在寻找。

  • 问题内容: 我需要将一些对象序列化为JSON并发送到WebService。如何使用org.json库?否则我将不得不使用另一个?这是我需要序列化的类: 我只放了类的变量和构造函数,但也有getter和setter方法。所以如果有人可以帮忙 问题答案: 没有注释的简单方法是使用Gson库 就那么简单:

  • 问题内容: 我有由第三方编码为固定长度数组的json’ed 元组数组: 我想使用json魔术来获取的实例列表 请帮助我放置适当的注释,以使ObjectMapper发挥作用。 我无法控制传入的格式,而我所有的google’n都以答案来回答如何将适当的json对象(而非数组)数组映射到对象列表 问题答案: 添加以下注释: 并且它应该根据需要序列化条目。 另外:然后使用它来强制执行特定顺序是最安全的,因

  • 问题内容: 我想知道如何让Jackson JSON库将JSON反序列化为现有对象?我试图找到如何做到这一点。但它似乎只能接受一个Class并实例化它本身。 或者,如果不可能,我想知道是否有任何Java JSON反序列化库都可以做到。 对于C#,这似乎是一个相应的问题:将数据从JSON字符串覆盖到现有对象实例。似乎JSON.NET具有PopulateObject(string,object)。 问题

  • 问题内容: 我需要将Objective- C对象序列化和反序列化为JSON以存储在CouchDB中。人们是否有通用解决方案最佳实践的示例代码?我看了几个JSON框架,它们在NSDictionary / NSArray级别停止了。即,许多框架会将NSDictionary / NSArray序列化和反序列化为JSON。但是我仍然要做将NSDictionary转换为Objective-C对象的工作。 为