掌握CRM系统操作界面:提升用户体验与效率
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'

我该如何解决?我试过了 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
然后,您应当丢下毛病,由于您的输入数据不好。
免责声明:
本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。
发表评论
暂时没有评论,来抢沙发吧~