Для пущей убедительности я только что проделал то же самое в языке Golang (я как раз сейчас занимаю себя его освоением).
Вот так:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
func main() {
fmt.Println(decodJSON("./ne_json")["a"])
fmt.Println(decodJSON("./ne_json")["b"])
}
func decodJSON(file string) map[string]interface{} {
bytes, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println(err)
}
var dat map[string]interface{}
if err := json.Unmarshal(bytes, &dat); err != nil {
panic(err)
}
return dat
}
И - о чудо! - строчка благополучно прочиталась и была "декодирована" в структуру с результатом в консоль
zx
sd
Резюме: я рад, что мои теоретические представления о том, что расширение *.json не значит ничего (от слова совсем), полностью подтвердились.
P.S. И не стоит удивляться, что для той же примитивной операции, но - в Go, потребовало сильно больше букав напейсать. Это оттого, что JSON - аббревиатура "JavaScript Object Notation".