Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia中的生成器表达式_Julia - Fatal编程技术网

Julia中的生成器表达式

Julia中的生成器表达式,julia,Julia,我试图在Julia中实现一个生成器表达式,但遇到了一个错误,我不知道如何修复 julia> using JSON julia> path = "test.txt" julia> JSON.parse(readline(open(path))) Dict{String,Any} with 16 entries: "nk" => 1 "cy" => "Danvers" "c" => "US" "hh" => "1.usa.gov"

我试图在Julia中实现一个生成器表达式,但遇到了一个错误,我不知道如何修复

julia> using JSON

julia> path = "test.txt"

julia> JSON.parse(readline(open(path)))
Dict{String,Any} with 16 entries:
  "nk" => 1
  "cy" => "Danvers"
  "c"  => "US"
  "hh" => "1.usa.gov"
  "r"  => "http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/wfLQtf"
  "a"  => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like …
  "h"  => "wfLQtf"
  "t"  => 1331923247
  "g"  => "A6qOVH"
  "tz" => "America/New_York"
  "ll" => {42.576698,-70.954903}
  "l"  => "orofrog"
  "hc" => 1331822918
  "gr" => "MA"
  "u"  => "http://www.ncbi.nlm.nih.gov/pubmed/22415991"
  "al" => "en-US,en;q=0.8"

julia> record = [JSON.parse(line) for line in eachline(open(path))]
ERROR: no method length(EachLine)
in anonymous at no file

不能对长度未知的对象使用列表理解。我想你需要一个
的while
循环


我也不确定是否可以对面向行的输入使用JSON解析,因为JSON边界可能跨行边界出现。

如果文件不是太大,可以使用
readlines
而不是
eachline
,因为它返回一个数组,而不是迭代器(和数组有一个长度方法,可以用于理解)

我最喜欢的是您在评论中描述的:

using JSON
records = Dict{String,Any}[]
open(path,"r") do f
    for line in eachline(f)
        push!(records, JSON.parse(line))
    end
end

我使用的是julia版本0.3.0-prerelease+4029,在我的例子中,文件中的所有json条目都在一行中。这是一个好的解决方案吗:使用json records=Dict{String,Any}[]open(path,“r”)do f for line in eachline(f)push!(records,json.parse(line))end-end记录[1]