仅使用默认库在jython中解码json

时间:2014-01-22 16:03:01

标签: java python json jython

我有一个关于将json放入我的jy​​thon脚本的问题。这是我的情景:

  • 我在笔记本电脑上运行python应用程序
  • 该应用需要与托管中运行的jython应用共享数据 环境在第三方的云环境中。
  • 我无法在此环境中添加第三方模块(所以我 无法安装com.xhaus.jyson例如)
  • 这可能意味着我只限于原生的功能 java - org.json.JSONObject也许

因此,有了这些限制,我想在我的笔记本电脑上取一个字典对象,将其转换为json,将其交付给托管的jython应用程序,然后使用本机jython或java工具将其转回该字典对象,以便我可以在我托管在云中的脚本中继续使用它。

我已经知道如何在“regular” python中执行此操作。这很简单。导入json并疯狂。但我的java功夫很弱,我以前从未在jython工作过。

所以我试图弄清楚这是否可以使用jython底层的java可靠而轻松地做到这一点,或者如果我最好使用像ast这样的东西,只需将字典作为字符串文字发送。我真的更喜欢坚持使用json,因为人们喜欢json的所有正常原因,所以任何帮助利用java库来完成这项工作都将不胜感激。

6 个答案:

答案 0 :(得分:2)

我忘记了这个问题。我的核心问题是我使用的是第三方云产品,他们是Jython安装的所有者,因此我对Jython环境的改变有限。当时我在想,我可以利用一个JAVA库来解决这个问题,但这种方法从来没有用过。

虽然jython不受我的控制,但我确实控制了我发送数据的方式而不是使用JSON,我发送了格式化字符串,然后使用python ast库(在jython中)将这些字符串转换为python对象。 / p>

最后它看起来像这样:

thestring = """['name', 'quest', 'favorite color']"""
theobject = ast.literal_eval(thestring)

这种类型的逻辑让我的本地机器上的python脚本将字符串发布到运行jython的web应用程序,并将这些字符串转换为python数据类型然后使用它们。这正是我想要使用JSON而不实际使用JSON的原因 - 它是python dicts所以它看起来非常像JSON,如果你没有真正关注。

感谢大家的建议。

答案 1 :(得分:0)

您可以使用JacksonGSON。您可以使用Java下JSON.org上列出的任何内容,您可以使用“Python”下的内容(例如simplejson)。

答案 2 :(得分:0)

你可以使用simplejson,它可以用作纯python,因此可以在Jython上运行。通过将其包含在与其他代码相同的源文件夹中,无需进行特殊安装。

答案 3 :(得分:0)

Jyson似乎是一个开源项目,在纯Java中实现python投诉json编解码器。

在此处下载:http://opensource.xhaus.com/projects/jyson/files

然后解压缩并将jyson-1.0.2 / lib / jyson-1.0.2.jar添加到您的CLASSPATH。

然后像这样导入:

 import com.xhaus.jyson.JysonCodec as json

在此处找到此信息:http://aholzner.wordpress.com/2010/07/31/using-json-from-jython/。适合我。

答案 4 :(得分:-1)

这个问题有点陈旧,但在遇到类似问题时我遇到了这个问题:

https://support.xebialabs.com/hc/communities/public/questions/201998425-Use-json-with-Jython-script

从本质上讲,这就是我解决它的方法(使用simplejson):

try:
    sys.path.append('<PATH TO SIMPLEJSON ROOT>')
    import simplejson as json
except Exception, e:
    print e

答案 5 :(得分:-1)

如果您正在使用latest version of jython,则可以访问python json库。所以:

import json
mydict_as_json = json.dumps(mydict)
# send over the wire
# on the remote side
import json
mydict = json.load(mydict_as_json_from_remote_as_file_like_object)

希望有帮助...