【问题标题】:Jython: Parse JSON object to get value (object has array)Jython:解析 JSON 对象以获取值(对象具有数组)
【发布时间】:2019-12-28 06:13:47
【问题描述】:

我有 JavaScript 可以解析 JSON object(对象有数组)并从 ZONE 字段返回值。

var obj = JSON.parse(json_text);
parsed_val = obj.features[0].attributes.ZONE

我想将 JavaScript 代码转换为 Jython

这是我尝试过的:

from com.ibm.json.java import JSONObject

obj = JSONObject.parse(json_text)
parsed_val = obj.get('features.attributes.ZONE'); 

Jython 编译,但它没有返回有效值(它返回None)。我认为这是因为我没有正确引用数组。

如何使用 Jython 解析 JSON 对象/数组以获取 ZONE 值?

(Jython 版本是 2.7.0。但是,我似乎无法使用 Python 的 JSON 库(通常包含在 Jython 中))。

【问题讨论】:

  • 我无法将其他 Python 库添加到我的系统/服务器。因此,我相信我仅限于 Jython/Maximo 中包含的 Java 库。
  • 您可以将 java 库添加到系统中,但这会产生其他问题。谷歌相关函数的 java 文档。 ibm.com/support/knowledgecenter/ja/SSEUEX_2.0.2/…
  • 另外,由于很明显您使用的是 GIS 端点,我会注意到如果 GIS 出现故障、移动 url、请求丢失等,您的脚本可能会出现很多问题。我不鼓励指向 GIS 数据的 url 链接,除非已经以图形方式与之交互。不过总是例外。
  • 试试.get('features').get('attributes').get('ZONE');
  • @User1973 啊我原来没看到。我只是想将您包含的内容(obj.get('features.attributes.ZONE'))翻译成可能有用的东西。我知道这个特定的 json 库是如何工作的,也许可以试试.get('features').get(0)....get('features')[0]...。无论哪种方式,都会有一种方法可以使用这个特定的库,因为 JSON 数组很常见。

标签: java json parsing jython maximo


【解决方案1】:

我需要在对象的每个级别使用get()

以及在第一级之后指定数组的索引位置:[0]

from com.ibm.json.java import JSONObject

obj = JSONObject.parse(json_text)
parsed_val = obj.get("features")[0].get("attributes").get("WEEK")

感谢 @vikarjramun 为我指明了正确的方向。谢谢。

【讨论】:

  • 第一个 get() 是 JSONObject 或 JSONArray 的 get() 方法继承自 HashtableHashMap(我忘了哪个),而不是 Python 的,取决于从 JSONObject.parse() 调用返回的内容.如果你做了一些事情将obj 强制转换为 Python 对象,那么它只会是 Python 的方法。
  • 这里是IBM's JavaDocs for JSONObject。它扩展了 java.util.HashMap。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2015-06-02
相关资源
最近更新 更多