我从jgrapht得到了一个简单的有向图,我试图使用jackson将它序列化为一个JSON文件,如下所示:
ObjectMapper mapper = new ObjectMapper();
File output = new File("P:\\tree.json");
ObjectWriter objectWriter = mapper.writer().withDefaultPrettyPrinter();
objectWriter.writeValue(output,simpleDirectedGraph);
然而,我得到了这个错误:
线程“main”com.fasterxml.jockson.databind中出现异常。JsonMappingException:找不到org.jgrapht.graph类的序列化程序。AbstractBaseGraph$ArrayListFactory和未发现用于创建BeanSerializer的属性(为避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:org.jgrapht.graph.SimpleDirectedGraph[“edgeSetFactory”]),位于位于com.fasterxml.jockson.databind.ser.impl.UnknownSerializerBase.serializeFields(BeanSerializer.java:32)的com.faster xml.jocson.databindcom.fasterxml.jockson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130)位于com.fastrxml.juckson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1387),位于com.festerxml.jackson.databindsun.reflect.NativeMethodAccessorImpl上的ms.fragment.JSONTreeGenerator.main(JSONTreGenerator.java:45)。位于com.intellij.rt.execution.application.main(AppMain.java:147)的sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethAccessorInpl.java:62)的invoke0(本机方法)
我已经看到有一个Gml发射器,但我对json感兴趣...我该怎么做?
您可以将Graph序列化为XML,然后从XML序列化为JSON:
序列化到XML :您可以使用这个库:XStream http://x-stream.github.io 它是一个小型库,可以轻松地允许您序列化和反序列化XML。
图书馆使用指南:http://x-stream.github.io/tutorial.html
然后尝试使用以下方法将XML映射到JSON:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
XML.java就是你要找的那类人:
import org.json.JSONObject;
import org.json.XML;
import org.json.JSONException;
public class Main {
public static int PRETTY_PRINT_INDENT_FACTOR = 4;
public static String TEST_XML_STRING =
"<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";
public static void main(String[] args) {
try {
JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
System.out.println(jsonPrettyPrintString);
} catch (JSONException je) {
System.out.println(je.toString());
}
}
}
你从杰克逊那里得到的例外:
JsonMappingException:没有找到类org.jgrapht.graph.AbstractBaseGraph$ArrayListFactory的序列化器,也没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))(通过引用链:org.jgrapht.graph.SimpleDirectedGraph["edgeSetFactory"])在com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:69)
给出了如何解决的线索:
SimpleDirectedGraph["edgeSetFactory"]
似乎为空从序列化中排除属性edgeSetFactory
的类型:
AbstractBaseGraph$ArrayListFactory
通常Jackson会使用< code>StdBeanSerializer将任何非原语类写入JSON。不幸的是,这对抽象类不起作用。
因此,您可以编写自己的< code>JsonSerializer来处理特殊字段。
您可以使用以下命令禁用异常:
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
问题内容: 我有一个简单的JSON键/值列表,该列表通过POST发送回ASP.NET。例: 我不打算将序列化为严格类型的.NET对象 我只需要一个普通的旧 Dictionary(Of String,String) 或一些等效项(哈希表,Dictionary(Of String,Object),老式的StringDictionary-地狱,二维字符串数组对我来说就行。 我可以使用ASP.NET 3.
问题内容: 我需要将一些对象序列化为JSON并发送到WebService。如何使用org.json库?否则我将不得不使用另一个?这是我需要序列化的类: 我只放置了类的变量和构造函数,但也包含了getter和setter方法。所以如果有人可以帮忙 问题答案: 没有注释的简单方法是使用Gson库 就那么简单:
问题内容: 如何将作为地图的属性序列化为地图的值列表?我已经能够使用吸气剂上的注释进行其他简单的转换。但是,我不确定我想做什么。 问题答案: 我们需要类似的东西,在我们的案例中,我们使用了您所评论的自定义项,这很简单: 使用它的代码:
问题内容: 我需要将一些对象序列化为JSON并发送到WebService。如何使用org.json库?否则我将不得不使用另一个?这是我需要序列化的类: 我只放了类的变量和构造函数,但也有getter和setter方法。所以如果有人可以帮忙 问题答案: 没有注释的简单方法是使用Gson库 就那么简单:
问题内容: 刚刚下载了ServiceStack.Text以在我的ASP.NET中使用它。我有很多属性的类,想将其中的五个(字符串,整数,二进制)序列化为JSON。有人可以发布简单的示例如何从我的课程中创建JSon对象吗? 问题答案: 默认情况下,ServiceStack将反序列化POCO的所有公共属性。 如果只想序列化一些属性,则想用[DataContract],[DataMember]属性装饰类
我正在使用xstream并尝试将列表序列化为XML。我需要一个输出结构 序列化的对象类似于 我的问题与作为对象集合的XStream-Root类似,但我希望在不使用包装对象的情况下这样做。