【问题标题】:Decoding json in jython using only default libraries仅使用默认库在 jython 中解码 json
【发布时间】:2014-01-22 16:03:00
【问题描述】:

我有一个关于将 json 放入我的 jython 脚本的问题。这是我的场景:

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

因此,由于这些限制,我想在我的笔记本电脑上获取一个字典对象,将其转换为 json,将其传送到托管的 jython 应用程序,然后使用本机 jython 或 java 工具将其转换回该字典对象,所以我可以继续在我托管在云中的脚本中处理它。

我已经知道如何在 "regular" python 中做到这一点。这很简单。导入 json 并发疯。但是我的java功夫很弱,之前从来没有在jython工作过。

所以我试图弄清楚是否可以使用 jython 底层的 java 可靠且轻松地做到这一点,或者我是否最好使用类似 ast 的东西并将字典作为字符串文字发送。老实说,出于人们喜欢 json 的所有正常原因,我更愿意坚持使用 json,因此对于利用 java 库完成这项工作的任何帮助将不胜感激。

【问题讨论】:

    标签: java python json jython


    【解决方案1】:

    我忘记了这个问题。我的核心问题是我使用的是第 3 方云产品,他们是 Jython 安装的所有者,因此我在 Jython 环境方面的更改受到限制。当时我在想我可以利用一个可供 jython 使用的 JAVA 库来解决这个问题,但从未成功。

    虽然 jython 超出了我的控制范围,但我确实控制了我发送数据的方式,因此我发送了格式化的字符串,而不是使用 JSON,然后使用 jython 中的 python ast 库将这些字符串转换为 python 对象。

    最后它看起来像这样:

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

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

    感谢大家的建议。

    【讨论】:

    • 感谢 Eric 跟进您的解决方案!我遇到了同样的情况,这真的节省了我的时间!
    • 对于那些必须数字使用的人 - import ast
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 运行我的脚本的整个环境是从我加载脚本的地方抽象出来的。包含到相对路径会中断,因为我的脚本在其他地方运行,而不是我上传的地方。
      • 所以你的脚本只能包含一个文件?
      • 似乎是这样。我是这项服务的新手,但情况似乎如此。所以我可以将默认值导入 jython。这意味着我不能像在 python 中那样导入 json。但这确实意味着我可以利用底层的 java 库。然而,我对 java 很糟糕,这就是我使用 Python 的原因,所以访问 java 对我没有多大帮助。
      • 如果您使用的是最新版本的 jython,您可以访问 python json 库。所以,请看下面我的回答......
      【解决方案4】:

      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/。为我工作。

      【讨论】:

        【解决方案5】:

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

        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
        

        【讨论】:

          【解决方案6】:

          如果您使用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)
          

          希望对您有所帮助...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-05-03
            • 1970-01-01
            • 2023-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-05
            相关资源
            最近更新 更多