如何使用python将yaml块转换为json块?

如何使用python将yaml块转换为json块?,python,json,yaml,Python,Json,Yaml,我有一个生成yaml数据的脚本。我需要它来生成等效的json数据 代码如下: def main(argv): global top global version global package librivox_rest_url = 'unknown' app_image_url = 'unknown' password = 'XXXXXXX

我有一个生成yaml数据的脚本。我需要它来生成等效的json数据

代码如下:

def main(argv):
        global top
        global version
        global package
        librivox_rest_url       = 'unknown'
        app_image_url           = 'unknown'
        password                = 'XXXXXXX'
        try:
              opts, args = getopt.getopt(argv,"hl:t:v:k:p:i:",["url=","top=","version=","package=","password=","image_url="])
        except getopt.GetoptError:
              print 'make_hiera_data_from_librivox_api.py -l <librvox url> [-t <top>] [-v <version>] [-p <password>]'
              sys.exit(2)
        for opt, arg in opts:
                if opt == '-h':
                        usage ( 'Help called' )
                        sys.exit(0)
                elif opt in ("-l", "--url"):
                        librivox_rest_url = arg
                elif opt in ("-t", "--top"):
                        top = arg
                elif opt in ("-v", "--version"):
                        version = arg
                elif opt in ("-p", "--password"):
                        password = arg
                elif opt in ("-k", "--package"):
                        password = arg
                elif opt in ("-i", "--image_url"):
                        app_image_url = arg

        if ( librivox_rest_url == 'unknown' ):
                usage ("Please specify a librivox api url")
                sys.exit (1)
        if ( app_image_url == 'unknown' ):
                usage ("Please specify the app image url")
                sys.exit (1)

        parsed          = json.loads(requests.get(librivox_rest_url).text)
        book_key        = parsed['books'].keys()[0]
        apptitle        = parsed['books'][book_key]['title']
        app_image_url   = app_image_url
        app_zip_url     = parsed['books'][book_key]['url_zip_file']
        description     = parsed['books'][book_key]['description']
        yaml_version = """---
top: '%s'
package: '%s'
version: %s
password: '%s'
make_audiobook::package_name: "%%{hiera('package')}"
make_audiobook::description::description: %s

make_audiobook::version: "%%{hiera('version')}"
make_audiobook::mp3filesdir: "%%{hiera('top')}/%%{::appname}/%%{::appname}/res/raw"
make_audiobook::app_image::app_image_url: '%s'
make_audiobook::app_image::resource_path:  "%%{hiera('top')}/%%{::appname}/%%{::appname}"
make_audiobook::app_image::appdir:  "%%{hiera('top')}/%%{::appname}"
make_audiobook::app_image::appname:  "%%{::appname}"
make_audiobook::app_javacode::appname:          "%%{::appname}"
make_audiobook::app_javacode::password:         "%%{hiera('password')}"
make_audiobook::app_javacode::apptitle:         "%s"
make_audiobook::app_javacode::package:          "%%{hiera('package')}"
make_audiobook::app_javacode::path_to_code:     "%%{hiera('top')}/%%{::appname}/%%{::appname}/src/com/%%{hiera('package')}/%%{::appname}"
make_audiobook::app_javacode::path_to_androidmanifest:     "%%{hiera('top')}/%%{::appname}/%%{::appname}"
make_audiobook::app_javacode::version:          "%%{hiera('version')}"
make_audiobook::app_javacode::tracks: """ % (top, package, version, password, description.encode('ascii', 'ignore').decode('ascii'), app_image_url, apptitle)

        for thing in get_filenames_from_zip_file (app_zip_url):
                if ( thing ):
                        yaml_version += " - %s\n" % thing

        print '''
make_audiobook::app_javacode::track_titles:
        '''.strip()
        for thing in parsed['books'][book_key]['sections']:
                yaml_version += " - %s\n" % (thing['title'])

        yaml_version += """
make_audiobook::create_project::workspace: "%%{hiera('top')}/%%{::appname}"
make_audiobook::create_project::appname: "%%{::appname}"
make_audiobook::create_project::package_name: "%%{hiera('package')}"
make_audiobook::create_project::android: '/home/plankton/android-sdk-linux/tools/android'

make_audiobook::generate_keystore::top: "%%{hiera('top')}"
make_audiobook::generate_keystore::password: "%%{hiera('password')}"
make_audiobook::ant_debug::workspace: "%%{hiera('top')}/%%{::appname}"

make_audiobook::app_mp3files::app_zip_url: '%s'
make_audiobook::app_mp3files::resource_path:  "%%{hiera('top')}/%%{::appname}/%%{::appname}"

make_audiobook::app_drawables::path_to_drawables:  "%%{hiera('top')}/%%{::appname}/%%{::appname}/res/drawable-hdpi"
""" % (app_zip_url)

        print yaml_version
        print json.dumps( yaml_version, sort_keys=True, indent=2)
def主管道(argv):
全球顶级
全局版本
全局包
librivox_rest_url='未知'
应用程序\图像\ url='未知'
密码='XXXXXXX'
尝试:
opts,args=getopt.getopt(argv,“hl:t:v:k:p:i:”,[“url=”,“top=”,“version=”,“package=”,“password=”,“image_url=”)
除getopt.GetoptError外:
打印'make_hiera_data_from_librivox_api.py-l[-t][v][p]'
系统出口(2)
对于opt,opt中的参数:
如果opt='-h':
用法('Help called')
系统出口(0)
elif选择加入(“-l”,“--url”):
librivox\u rest\u url=arg
elif选择加入(“-t”,“-top”):
顶部=arg
elif选择加入(“-v”,“--version”):
版本=arg
elif opt-in(“-p”,“--password”):
密码=arg
elif选择加入(“-k”和“--package”):
密码=arg
elif选择加入(“-i”,“--image_url”):
应用程序\图像\ url=arg
如果(librivox_rest_url==“未知”):
用法(“请指定librivox api url”)
系统出口(1)
如果(app_image_url==“未知”):
用法(“请指定应用程序图像url”)
系统出口(1)
parsed=json.load(requests.get(librivox\u rest\u url.text)
book_key=已解析的['books'].keys()[0]
apptitle=parsed['books'][book_key]['title']
app\u image\u url=app\u image\u url
app_zip_url=parsed['books'][book_key]['url_zip_file']
description=已解析['books'][book_key]['description']
yaml_version=“”---
顶部:'%s'
包:“%s”
版本:%s
密码:'%s'
make_audiobook::package_name:“%%{hiera('package')}”
制作有声读物::说明::说明:%s
make_有声读物::版本:“%%{hiera('version')}”
make_audiobook::mp3filesdir:“%%{hiera('top')}/%%{::appname}/%%{::appname}/res/raw”
制作有声读物::应用程序图像::应用程序图像url:“%s”
制作有声读物::应用程序图像::资源路径:“%%{hiera('top')}/%%{::appname}/%%{::appname}”
make_audiobook::app_image::appdir:“%%{hiera('top')}/%%{::appname}”
make_audiobook::app_image::appname:“%%{::appname}”
make_audiobook::app_javacode::appname:“%%{::appname}”
make_audiobook::app_javacode::password:“%%{hiera('password')}”
make_audiobook::app_javacode::apptitle:“%s”
make_audiobook::app_javacode::package:“%%{hiera('package')}”
制作有声读物::app_javacode::路径到代码:“%%{hiera('top')}/%%{::appname}/%%{::appname}/src/com/%%{hiera('package')}/%%{::appname}”
制作有声读物::app_javacode::指向androidmanifest的路径:“%%{hiera('top')}/%%{::appname}/%%{::appname}”
make_audiobook::app_javacode::version:“%%{hiera('version')}”
make_audiobook::app_javacode::tracks:“%”(顶部、软件包、版本、密码、描述。编码('ascii','ignore')。解码('ascii')、app_image_url、apptitle)
对于从文件(app\u zip\u url)中获取文件名的内容:
如果(事情):
yaml_版本+=“-%s\n”%s
打印“”'
制作有声读物::应用程序Java代码::曲目标题:
''.strip()
对于解析的['books'][book_key]['sections']中的内容:
yaml_version+=“-%s\n”%(东西['title'])
yaml_版本+=“”“
制作有声读物::创建项目::工作区:“%%{hiera('top')}/%%{::appname}”
make_audiobook::create_project::appname:“%%{::appname}”
make_audiobook::create_project::package_name:“%%{hiera('package')}”
制作有声读物::创建项目::android:“/home/plankton/android sdk linux/tools/android”
make_audiobook::generate_keystore::top:“%%{hiera('top')}”
make_audiobook::generate_keystore::password:“%%{hiera('password')}”
make_audiobook::ant_debug::workspace:“%%{hiera('top')}/%%{::appname}”
制作有声读物::app\u mp3文件::app\u zip\u url:“%s”
制作有声读物::app_mp3files::资源路径:“%%{hiera('top')}/%%{::appname}/%%{::appname}”
制作有声读物::app_drawables::路径:“%%{hiera('top')}/%%{::appname}/%%{::appname}/res/drawable hdpi”
“”“%(应用程序\u zip\u url)
打印yaml_版本
打印json.dumps(yaml\u版本,sort\u key=True,indent=2)
当我运行这个脚本时,我得到了这个输出,其中json数据只是一条长长的行。我做错了什么

make_audiobook::app_javacode::track_titles:
---
top: '/home/get_links/TEMPLATE_FILES'
package: 'redcricket'
version: 1
password: 'XXXXXXX'
make_audiobook::package_name: "%{hiera('package')}"
make_audiobook::description::description: <p>"The Art of War is a Chinese military treatise written during the 6th century BC by Sun Tzu. Composed of 13 chapters, each of which is devoted to one aspect of warfare, it has long been praised as the definitive work on military strategies and tactics of its time. The Art of War is one of the oldest and most famous studies of strategy and has had a huge influence on both military planning and beyond. The Art of War has also been applied, with much success, to business and managerial strategies." (summary from Wikipedia)</p>

make_audiobook::version: "%{hiera('version')}"
make_audiobook::mp3filesdir: "%{hiera('top')}/%{::appname}/%{::appname}/res/raw"
make_audiobook::app_image::app_image_url: 'https://ia801509.us.archive.org/7/items/song_of_the_wave_1703_librivox/songwave_1703.jpg'
make_audiobook::app_image::resource_path:  "%{hiera('top')}/%{::appname}/%{::appname}"
make_audiobook::app_image::appdir:  "%{hiera('top')}/%{::appname}"
make_audiobook::app_image::appname:  "%{::appname}"
make_audiobook::app_javacode::appname:          "%{::appname}"
make_audiobook::app_javacode::password:         "%{hiera('password')}"
make_audiobook::app_javacode::apptitle:         "Art of War"
make_audiobook::app_javacode::package:          "%{hiera('package')}"
make_audiobook::app_javacode::path_to_code:     "%{hiera('top')}/%{::appname}/%{::appname}/src/com/%{hiera('package')}/%{::appname}"
make_audiobook::app_javacode::path_to_androidmanifest:     "%{hiera('top')}/%{::appname}/%{::appname}"
make_audiobook::app_javacode::version:          "%{hiera('version')}"
make_audiobook::app_javacode::tracks:  - art_of_war_01-02_sun_tzu_64kb
 - art_of_war_03-04_sun_tzu_64kb
 - art_of_war_05-06_sun_tzu_64kb
 - art_of_war_07-08_sun_tzu_64kb
 - art_of_war_09-10_sun_tzu_64kb
 - art_of_war_11_sun_tzu_64kb
 - art_of_war_12-13_sun_tzu_64kb
 - 01 - Laying Plans / 02 - Waging War
 - 03 - Attack By Stratagem / 04 - Tactical Dispositions
 - 05 - Energy / 06 - Weak Points and Strong
 - 07 - Maneuvering / 08 - Variation in Tactics
 - 09 - The Army on the March / 10 - Terrain
 - 11 - The Nine Situations
 - 12 - The Attack By Fire / 13 - The Use of Spies

make_audiobook::create_project::workspace: "%{hiera('top')}/%{::appname}"
make_audiobook::create_project::appname: "%{::appname}"
make_audiobook::create_project::package_name: "%{hiera('package')}"
make_audiobook::create_project::android: '/home/plankton/android-sdk-linux/tools/android'

make_audiobook::generate_keystore::top: "%{hiera('top')}"
make_audiobook::generate_keystore::password: "%{hiera('password')}"
make_audiobook::ant_debug::workspace: "%{hiera('top')}/%{::appname}"

make_audiobook::app_mp3files::app_zip_url: 'http://www.archive.org/download/art_of_war_librivox/art_of_war_librivox_64kb_mp3.zip'
make_audiobook::app_mp3files::resource_path:  "%{hiera('top')}/%{::appname}/%{::appname}"

make_audiobook::app_drawables::path_to_drawables:  "%{hiera('top')}/%{::appname}/%{::appname}/res/drawable-hdpi"

"---\ntop: '/home/get_links/TEMPLATE_FILES'\npackage: 'redcricket'\nversion: 1\npassword: 'XXXXXXX'\nmake_audiobook::package_name: \"%{hiera('package')}\"\nmake_audiobook::description::description: <p>\"The Art of War is a Chinese military treatise written during the 6th century BC by Sun Tzu. Composed of 13 chapters, each of which is devoted to one aspect of warfare, it has long been praised as the definitive work on military strategies and tactics of its time. The Art of War is one of the oldest and most famous studies of strategy and has had a huge influence on both military planning and beyond. The Art of War has also been applied, with much success, to business and managerial strategies.\" (summary from Wikipedia)</p>\n\nmake_audiobook::version: \"%{hiera('version')}\"\nmake_audiobook::mp3filesdir: \"%{hiera('top')}/%{::appname}/%{::appname}/res/raw\"\nmake_audiobook::app_image::app_image_url: 'https://ia801509.us.archive.org/7/items/song_of_the_wave_1703_librivox/songwave_1703.jpg'\nmake_audiobook::app_image::resource_path:  \"%{hiera('top')}/%{::appname}/%{::appname}\"\nmake_audiobook::app_image::appdir:  \"%{hiera('top')}/%{::appname}\"\nmake_audiobook::app_image::appname:  \"%{::appname}\"\nmake_audiobook::app_javacode::appname:          \"%{::appname}\"\nmake_audiobook::app_javacode::password:         \"%{hiera('password')}\"\nmake_audiobook::app_javacode::apptitle:         \"Art of War\"\nmake_audiobook::app_javacode::package:          \"%{hiera('package')}\"\nmake_audiobook::app_javacode::path_to_code:     \"%{hiera('top')}/%{::appname}/%{::appname}/src/com/%{hiera('package')}/%{::appname}\"\nmake_audiobook::app_javacode::path_to_androidmanifest:     \"%{hiera('top')}/%{::appname}/%{::appname}\"\nmake_audiobook::app_javacode::version:          \"%{hiera('version')}\"\nmake_audiobook::app_javacode::tracks:  - art_of_war_01-02_sun_tzu_64kb\n - art_of_war_03-04_sun_tzu_64kb\n - art_of_war_05-06_sun_tzu_64kb\n - art_of_war_07-08_sun_tzu_64kb\n - art_of_war_09-10_sun_tzu_64kb\n - art_of_war_11_sun_tzu_64kb\n - art_of_war_12-13_sun_tzu_64kb\n - 01 - Laying Plans / 02 - Waging War\n - 03 - Attack By Stratagem / 04 - Tactical Dispositions\n - 05 - Energy / 06 - Weak Points and Strong\n - 07 - Maneuvering / 08 - Variation in Tactics\n - 09 - The Army on the March / 10 - Terrain\n - 11 - The Nine Situations\n - 12 - The Attack By Fire / 13 - The Use of Spies\n\nmake_audiobook::create_project::workspace: \"%{hiera('top')}/%{::appname}\"\nmake_audiobook::create_project::appname: \"%{::appname}\"\nmake_audiobook::create_project::package_name: \"%{hiera('package')}\"\nmake_audiobook::create_project::android: '/home/plankton/android-sdk-linux/tools/android'\n\nmake_audiobook::generate_keystore::top: \"%{hiera('top')}\"\nmake_audiobook::generate_keystore::password: \"%{hiera('password')}\"\nmake_audiobook::ant_debug::workspace: \"%{hiera('top')}/%{::appname}\"\n\nmake_audiobook::app_mp3files::app_zip_url: 'http://www.archive.org/download/art_of_war_librivox/art_of_war_librivox_64kb_mp3.zip'\nmake_audiobook::app_mp3files::resource_path:  \"%{hiera('top')}/%{::appname}/%{::appname}\"\n\nmake_audiobook::app_drawables::path_to_drawables:  \"%{hiera('top')}/%{::appname}/%{::appname}/res/drawable-hdpi\" \n"
make_audiobook::app_javacode::track_titles:
---
顶部:'/home/get_links/TEMPLATE_FILES'
套餐:“红蟋蟀”
版本:1
密码:“XXXXXXX”
make_audiobook::package_name:“%{hiera('package')}”
制作有声读物::描述::描述:《孙子兵法》是孙子在公元前6世纪写的一篇中国军事论文。它由13章组成,每一章都专门讨论战争的一个方面,长期以来一直被誉为当时关于军事战略和战术的权威著作。《孙子兵法》是最古老、最著名的战略研究之一,对军事规划和其他领域都产生了巨大影响。《孙子兵法》也被成功地应用于商业和管理战略

make_有声读物::版本:“%{hiera('version')}” make_audiobook::mp3filesdir:“%{hiera('top')}/%{::appname}/%{::appname}/res/raw” 制作有声读物::应用程序图像::应用程序图像\u url:'https://ia801509.us.archive.org/7/items/song_of_the_wave_1703_librivox/songwave_1703.jpg' 制作有声读物::应用程序图像::资源路径:“%{hiera('top')}/%{::appname}/%{::appname}” make_audiobook::app_image::appdir:“%{hiera('top')}/%{::appname}” make_audiobook::app_image::appname:“%{::appname}” make_audiobook::app_javacode::appname:“%{::appname}” make_audiobook::app_javacode::passwo
import yaml
data = {...}  # python datastructure
yaml.dump(data, default_flow_style=False)  # second parameter specifies block style yaml.
print json.dumps(data, indent=4)
print json.dumps(yaml.load(...), indent=4)