ad

ruby to_yaml串起我的json-英雄云拓展知识分享

匿名投稿 390 2024-01-21

我正在尝试将Ruby Hash转换为YAML。我希望一部份哈希是行之有效的的json;但是,当我尝试序列化JSON字符串时,它会以引号转换为YAML。

举例来看,当我只有一个简单的字符串时,ouput以下(注意 foo 不在报价中):

request = {}

request['body'] = 'foo'

request.to_yaml # outputs: body: foo

但是,当我在字符串的开头添加一些东西时 { foo 援用身体的输出:

request['body'] = '{ foo'

request.to_yaml # outputs: body: '{ foo'

ruby to_yaml串起我的json-英雄云拓展知识分享

我该如何解决?我试过了 JSON.parse 而且,虽然这是一项工作,但我不能保证此输入实际上是JSON(多是XML等) - 我只想回馈给我的任何东西,但不要“拼写”。

基本上,我想给出一个看起来像:

{ 'request' => {

'url' => '/posts',

'method' => 'GET',

'headers' => [

'Content-Type' => 'application/json'

]

},

'response' => {

'code' => 200,

'body' => '[{"id":"ef4b3a","title":"this is the title"},{"id":"a98c4f","title":"title of the second post"}]'

}

}

返回:

request:

url: /posts

method: GET

headers:

- Content-Type: application/json

response:

code: 200

body:

[{"id":"ef4b3a","title":"this is the title"},{"id":"a98c4f","title":"title of the second post"}]

缘由是:现在,我可以从YAML到正确的Ruby Hash,但我不能以其他方式走。

看答案

方法 my_hash.to_yaml() 只需进行哈希,然后将其转换为YAML而无需对价值观做任何特别的事情。该方法不在意您的字符串是JSON还是XML,它只是将其视为字符串。

那末,为何当其他字符串没有时,我的JSON会被援用呢?

好问题!缘由很简单:卷曲括号是YAML语法的行之有效的部份。

这个:

my_key: { sub: 1, keys: 2}

被称为YAML中的流映照语法,它允许您在一行中进行嵌套映照。为了回避其中有卷曲牙套的弦,YAML使用引号:

my_key: "{ sub: 1, keys: 2}" # this is just a string

固然,引号对所有字符串都是可选的:

my_key: "foo" #same as my_key: foo

好的,但是我想要 to_yaml() 要找到我的JSON字符串并将其转换为YAML映照,例如其余的哈希。

那末,您需要将JSON字符串转换为像其他哈希的哈希线。 to_yaml() 将A HASH转换为YAML。它不会将字符串转换为YAML。正如您提到的那样,适当的方法是使用json.parse:

request['body'] = JSON.parse( '{"id":"ef4b3a"}' )

但是字符串可能不是JSON!它多是XML或其他一些Smelly字符串。

这是 确切地 为何 to_yaml() 不转换字符串。一个明智的程序员曾告知我:“字符串是字符串。字符串不是数据结构。字符串是字符串。”

如果要将字符串转换为数据结构,则需要对其进行验证并解析。由于不能保证字符串是行之有效的的,所以您作为程序员有责任肯定您的数据是JSON还是XML还是不好,并决定如何响应每一个数据。

由于看起来您正在解析网页,因此您可能需要斟酌使用其他Web客户端使用的相同数据来解析这些内容:

{ 'request' => {

'url' => '/posts',

'method' => 'GET',

'headers' => [

'Content-Type' => 'application/json' #<== this guy, right here!

]

},

'response' => {

'code' => 200,

'body' => '[{"id":"ef4b3a","title":"this is the title"},{"id":"a98c4f","title":"title of the second post"}]'

}

}

如果是 content-type 不同意 body 然后,您应当丢下毛病,由于您的输入数据不好。


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:用户体验 工作表 企业自动化
上一篇:我没法使用射击库将数据发布到MySQL数据库-英雄云拓展知识分享
下一篇:如何使用Maven启动“鲍尔安装”然后“弹簧靴:运行”?-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×