2016-05-04 7 views
3

Ich arbeite mit einem Ruby-Skript, das eine .json-Datei liest. HierEin JSON-Text muss mindestens zwei Oktette enthalten! (JSON :: ParserError)

ist die JSON-Datei:

{ 
    "feed.xml": "93d5b140dd2b4779edef0347ac835fb1", 
    "index.html": "1cbe25936e392161bad6074d65acdd91", 
    "md5.json": "655d7c1dbf83a271f348a50a44ba4f6a", 
    "test.sh": "9be192b1b5a9978cb3623737156445fd", 
    "index.html": "c064e204040cde216d494776fdcfb68f", 
    "main.css": "21b13d87db2186d22720e8c881a78580", 
    "welcome-to-jekyll.html": "01d7c7d66bdeecd9cd69feb5b4b4184d" 
} 

Es vollständig gültig ist, und ist für seine Existenz überprüft, bevor Sie von ihm zu lesen. Beispiel:

if File.file?("md5.json") 
    puts "MD5s exists" 
    mddigests = File.open("md5.json", "r") 
    puts "MD5s" + mddigests.read 
    items = JSON.parse(mddigests.read) <--- Where it all goes wrong. 
    puts items["feed.xml"] 

Alles funktioniert bis zu diesem Punkt:

MD5s exists 
MD5s{ 
    "feed.xml": "93d5b140dd2b4779edef0347ac835fb1", 
    "index.html": "1cbe25936e392161bad6074d65acdd91", 
    "md5.json": "655d7c1dbf83a271f348a50a44ba4f6a", 
    "test.sh": "9be192b1b5a9978cb3623737156445fd", 
    "index.html": "c064e204040cde216d494776fdcfb68f", 
    "main.css": "21b13d87db2186d22720e8c881a78580", 
    "welcome-to-jekyll.html": "01d7c7d66bdeecd9cd69feb5b4b4184d" 
} 
common.rb:156:in `initialize': A JSON text must at least contain two octets! (JSON::ParserError) 

ich gesucht habe und versucht, eine Menge verschiedenen Dinge, ohne Erfolg. Ich bin ratlos. Vielen Dank!

+0

Tritt dies immer noch auf, wenn Sie den ersten middigests.read auskommentieren? – Ian

Antwort

6

Sie haben einen doppelten Anruf an read() an dem Punkt, dass alles schief geht. Ersetzen Sie den zweiten Anruf read() durch die Variable mddigests und alles sollte in Ordnung sein.

sollten Dieser Code funktioniert wie man es erwarten würde:

if File.file?("md5.json") 
    puts "MD5s exists" 
    mddigests = File.open("md5.json", "r") 
    digests = mddigests.read 
    puts "MD5s" + digests 
    items = JSON.parse(digests) #<--- This should work now! 
    puts items["feed.xml"] 
end 

Der Grund hierfür ist, dass der Dateizeiger wird nach dem ersten read() bewegt und durch die zweite read(), dann ist es am Ende der Datei, damit die Nachricht, die mindestens 2 Oktetts benötigt.

+0

vielen dank! Das ist irgendwie komisch, aber ich denke, das ist wie Ruby funktioniert :) –

Verwandte Themen