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

Jython和杰克逊

裘安阳
2023-03-14

首先,我不熟悉Jython。我正在寻找一种将python代码集成到Java项目中的方法。因此我正在调查Jython。

我正在尝试将一个 json 字符串转换为 Java 对象 - 在 python 中。

首先,我一直在努力让Jython找到我的java类。由于缺乏更优雅的解决方案,我可以通过简单地执行以下操作来向前迈进:

import sys
sys.path.append('/home/anton/workspaces/m/TradePerformance/lib/jackson-databind-2.5.1.jar')
sys.path.append('/home/anton/workspaces/m/TradePerformance/lib/jackson-core-2.5.0.jar')

无论如何。。。

我正在尝试以下操作:

url = 'myRestService...'
response = urllib2.urlopen(url).read()
print response
import sys

mapper =  ObjectMapper
trades = ArrayList<TradeOrder>()
#trades = mapper.readValue(response, ArrayList<TradeOrder>().__class__, "");
#trades = mapper.convertValue(ArrayList<TradeOrder>().__class__, response)
#trades= mapper.reader
trades = mapper.readValue(response, ArrayList<TradeOrder>().__class__)

但是,在运行时,我收到以下错误:

Traceback (most recent call last):
  File "/home/anton/workspaces/m/TradePerformance/src/com/test/test.py", line 41, in <module>
    trades = mapper.readValue(response, ArrayList<TradeOrder>().__class__);
TypeError: readValue(): expected 3-5 args; got 2

我不确定为什么Jython说它期望3-5个参数。根据JavaDocs上的 http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/ObjectMapper.html 这种方法有3个重载,并且都期望2个参数。

有人知道问题是什么吗?

共有2个答案

沙宣
2023-03-14
匿名用户

这可能不是您的主要问题,但是作为JSON的一般最佳实践,根值应该总是JSON对象,而不是标量或数组。这避免了很多很多像Java类型擦除这样的问题。这并不是说您不能让< code>List和这样的集合工作,而是说对于泛型类型化需要额外的注意——只要根值是一个对象,这种工作就是不必要的。

督劲
2023-03-14

< code>self算作一个参数。所以,你实际上试图传递三个参数。那不是你的问题。

您应该留下

 类似资料:
  • 我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 我正在尝试将jboss wildfly 8配置为将Jackson用于JSON。所以我补充说 我的耳朵工程。但在部署时,我会遇到以下错误: 原因:java。lang.LinkageError:加载程序约束冲突:解析重写的方法“org.jboss.resteasy.plugins.providers.jackson.ResteasyJacksonProvider$Proxy$\u$$WeldClien

  • 问题内容: 我的User对象的Jackson序列化遇到问题。有一些带有getter和setter的私有字段。当我做这样的事情时,一切工作正常: 但是我想用Spring Framework自动连接User对象: 这是行不通的。我有一个错误: 当我尝试忽略这些未知错误时 我得到了无限递归: 看起来Spring在自动装配MyUser实例上做错了什么,因此Jackson无法序列化它。 有办法解决吗? 更新

  • 问题内容: 可以同时使用Spring 和的注释,使用Jackson 和注释来修改Spring MVC控制器返回的JSON 吗? 当客户端请求的集合时,我想返回每个的最小版本,也许只是它的ID。然后,在随后的调用中,客户端可以使用该ID来请求具有所有属性的完整实例。 能够在Spring MVC控制器方法上指定它是理想的,因为调用的方法定义了客户端请求数据的上下文。 问题答案: 这个问题解决了! 跟随

  • 我想知道为什么没有一种坚定的方式来与杰克逊合作。我只想解析JSON字符串: 但我真的很困惑,我应该导入什么来实现这一点。根据这个链接,我尝试导入映射器asl。jar。但我得到了这个编译错误: 然后我尝试导入jackson-core-2.4.2和jackson-databind-2.4.2。所以没有编译错误,但我得到了这个运行时异常(在映射器定义行中): 请指导我应该导入哪些内容才能使用Jackso