没有将文件隐式转换为字符串

詹姆士

我希望遍历json文件的目录并将其转换为ruby哈希。我的文件循环器功能可以成功捕获每个文件,并且文件格式正确为json。这是我的代码:

def self.update_server
  if Dir.exist?("log/order_errors") == true
    logger.debug "#{Dir.entries("log/order_errors")}"
    Dir.foreach("log/order_errors") { |f|
      logger.debug "Retrieved #{f}"
      File.open(f, "r") { |current_file|
        JSON.parse(current_file)
      }
    }
  else
    logger.error "Was unable to find the directory specified."
  end
end

对正在进行的工作或整理文件以便正确解析它们需要做什么的任何想法吗?

7stud

JSON.parse() 接受字符串作为参数,而不是文件:

require 'json'

File.open('data.json') do |f|
  JSON.parse(f)
end

--output:--
...no implicit conversion of File into String (TypeError)...

这是这样做的方法:

require 'json'

File.open('data.json') do |f|
  hash = JSON.parse(f.read)  #***HERE***
  p hash
end

--output:--
{"x"=>1, "y"=>2}

json模块的文档太恐怖了,不幸的是这是ruby的典型。文档说parse()的参数是a JSON document,这听起来确实更像文件而不是字符串。文档应该说的是,该参数必须是json格式的String。

顺便说一句,在这一行:

if Dir.exist?("log/order_errors") == true 

...现存的()方法调用被其返回值替换,因此如果目录存在,ruby会将其转换为:

if true == true

然后,ruby必须进行比较true == true,然后ruby将比较结果替换为比较结果,即true产生以下结果:

if true

现在,如果您改为这样写:

if Dir.exist?("log/order_errors")

再次,将exist?()方法调用替换为其返回值,如果目录存在,则将获得以下信息:

if true

如果该目录不存在,则用将替换exist?()方法调用false,从而产生以下内容:

if false

因此,== true在exist?()方法调用之后进行写入既浪费了键入时间,又浪费了处理时间,因为它需要使用ruby进行额外的比较。如上所示,无需进行比较即可获得相同的结果。规则是:如果方法返回true或false,则无需在== true其后编写在ruby中,通常很容易分辨出方法何时返回true或false,因为该方法名将以?结尾

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

没有将字符串隐式转换为哈希(smarter_csv gem,上传带有输入的文件)

来自分类Dev

尝试创建新记录时“没有将符号隐式转换为字符串”

来自分类Dev

尝试解析JSON数据时“没有将数组隐式转换为字符串”

来自分类Dev

嵌套属性错误:没有将字符串隐式转换为整数

来自分类Dev

RSpec-类型错误-没有将字符串隐式转换为整数

来自分类Dev

没有将符号隐式转换为字符串,回形针和Rails 4

来自分类Dev

在Rails上的ruby上没有将字符串隐式转换为整数

来自分类Dev

嵌套属性错误:没有将字符串隐式转换为整数

来自分类Dev

没有将字符串隐式转换为整数 Ruby on Rails

来自分类Dev

没有将哈希隐式转换为字符串(Ruby)

来自分类Dev

Rails 导入:“没有将字符串隐式转换为数组”

来自分类Dev

客户端验证创建“没有将Fixnum隐式转换为字符串”错误

来自分类Dev

Rails 4仅在生产中才“没有将符号隐式转换为字符串”

来自分类Dev

Rails 4仅在生产中才“没有将符号隐式转换为字符串”

来自分类Dev

无法将没有输入参数的类型void隐式转换为字符串C#

来自分类Dev

在 rspec 中使用 Rack::Test::UploadedFile 时,没有将哈希隐式转换为字符串时出错

来自分类Dev

尝试从哈希中获取值时,“没有将字符串隐式转换为整数”错误

来自分类Dev

Ruby on Rails 4-CSV导入-没有隐式转换为字符串

来自分类Dev

错误无法将字符串文件路径上的类型“ void”隐式转换为“ string”

来自分类Dev

Rails 4-“没有将Fixnum隐式转换为字符串”-仅在生产中发生错误

来自分类Dev

隐式转换为const字符串引用失败

来自分类Dev

不能将字符串隐式转换为 int

来自分类Dev

为什么javascript / typescript隐式将日期对象转换为字符串?

来自分类Dev

无法将类型字符串隐式转换为char

来自分类Dev

连接字符串。无法将'String'隐式转换为'System.Data.SqlClient.SqlConnection'

来自分类Dev

Python错误:无法将字节隐式转换为字符串

来自分类Dev

无法将字符串隐式转换为Microsoft.Bot.Schema.Activity

来自分类Dev

将字符串隐式转换为string_view

来自分类Dev

无法将类型void隐式转换为字符串C#

Related 相关文章

  1. 1

    没有将字符串隐式转换为哈希(smarter_csv gem,上传带有输入的文件)

  2. 2

    尝试创建新记录时“没有将符号隐式转换为字符串”

  3. 3

    尝试解析JSON数据时“没有将数组隐式转换为字符串”

  4. 4

    嵌套属性错误:没有将字符串隐式转换为整数

  5. 5

    RSpec-类型错误-没有将字符串隐式转换为整数

  6. 6

    没有将符号隐式转换为字符串,回形针和Rails 4

  7. 7

    在Rails上的ruby上没有将字符串隐式转换为整数

  8. 8

    嵌套属性错误:没有将字符串隐式转换为整数

  9. 9

    没有将字符串隐式转换为整数 Ruby on Rails

  10. 10

    没有将哈希隐式转换为字符串(Ruby)

  11. 11

    Rails 导入:“没有将字符串隐式转换为数组”

  12. 12

    客户端验证创建“没有将Fixnum隐式转换为字符串”错误

  13. 13

    Rails 4仅在生产中才“没有将符号隐式转换为字符串”

  14. 14

    Rails 4仅在生产中才“没有将符号隐式转换为字符串”

  15. 15

    无法将没有输入参数的类型void隐式转换为字符串C#

  16. 16

    在 rspec 中使用 Rack::Test::UploadedFile 时,没有将哈希隐式转换为字符串时出错

  17. 17

    尝试从哈希中获取值时,“没有将字符串隐式转换为整数”错误

  18. 18

    Ruby on Rails 4-CSV导入-没有隐式转换为字符串

  19. 19

    错误无法将字符串文件路径上的类型“ void”隐式转换为“ string”

  20. 20

    Rails 4-“没有将Fixnum隐式转换为字符串”-仅在生产中发生错误

  21. 21

    隐式转换为const字符串引用失败

  22. 22

    不能将字符串隐式转换为 int

  23. 23

    为什么javascript / typescript隐式将日期对象转换为字符串?

  24. 24

    无法将类型字符串隐式转换为char

  25. 25

    连接字符串。无法将'String'隐式转换为'System.Data.SqlClient.SqlConnection'

  26. 26

    Python错误:无法将字节隐式转换为字符串

  27. 27

    无法将字符串隐式转换为Microsoft.Bot.Schema.Activity

  28. 28

    将字符串隐式转换为string_view

  29. 29

    无法将类型void隐式转换为字符串C#

热门标签

归档