Декодирование json в jython с использованием только библиотек по умолчанию

У меня есть вопрос о получении json в моем сценарии jython. Вот мой сценарий:

  • я запускаю приложение python на своем ноутбуке
  • Это приложение должно обмениваться данными с приложением jython, запущенным в размещенном окружающая среда в облачной среде третьей стороны.
  • у меня нет возможности добавлять сторонние модули в эту среду (поэтому я не могу установить com.xhaus.jyson, например)
  • Это, вероятно, означает, что я ограничен функциями, которые являются родными к java-org.формат JSON.JSONObject возможно

поэтому с этими ограничениями я хочу взять объект словаря на своем ноутбуке, превратить его в json, доставить его в размещенное приложение jython, а затем использовать собственные инструменты jython или java, чтобы превратить его обратно в этот объект словаря, чтобы я мог продолжить работу над ним в моем скрипте, размещенном в облаке.

Я уже знаю, как это сделать в "регулярные" python. Это просто. импортируйте json и сходите с ума. Но мой java kung fu слабым и я никогда не работала в языка Jython раньше.

поэтому я пытаюсь выяснить, возможно ли это сделать надежно и легко, используя java, лежащую в основе jython, или мне лучше использовать что-то вроде ast и просто отправить словарь в виде строкового литерала. Я бы честно предпочел придерживаться json по всем обычным причинам, таким как json, поэтому любая помощь в использовании библиотек java для этой работы будет оценена.

6 ответов


Я забыл об этом вопросе. Моя основная проблема здесь заключалась в том, что я использовал стороннее облачное предложение, и они были владельцами установки Jython, поэтому я был ограничен в том, что я мог изменить в среде Jython. В то время я думал, что могу использовать библиотеку JAVA, которая будет доступна jython для решения этой проблемы, но это никогда не сработает.

в то время как jython был вне моего контроля, я контролировал, как я отправил данные, поэтому вместо использования JSON я отправил форматированный строки, а затем использовали библиотеку python ast, которая была в jython, чтобы превратить эти строки в объекты python.

в итоге это выглядело примерно так:

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

этот тип логики позволяет моему скрипту python на моей локальной машине отправлять строки в веб-приложение под управлением jython и преобразовывать эти строки в типы данных python, а затем использовать их. Это было именно то, что я хотел сделать с JSON без использования JSON - это были Python dicts, поэтому он выглядел ужасно похожим на JSON если бы ты не обращал внимания.

спасибо всем за ваши предложения.


можно использовать Джексон или GSON. Вы можете использовать все, что указано наJSON.org под Java вы можете использовать материал под " Python "(например simplejson).


можно использовать simplejson, который может использоваться как чистый python, поэтому будет работать на Jython. Включив его в ту же исходную папку, что и другой код, нет необходимости в специальной установке.


Jyson кажется, проект с открытым исходным кодом, реализующий кодек JSON жалобы python в чистой Java.

загрузите его здесь: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/. Работает для меня.


этот вопрос немного устарел, но я столкнулся с этим, когда у меня была аналогичная проблема:

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

Если вы используете последняя версия 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)

надеюсь, что это поможет...