Próbuję załadować lokalny plik JSON, ale nie zadziała. Oto mój kod JavaScript (używając jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
Plik test.json:
{"a" : "b", "c" : "d"}
Nic nie jest wyświetlane, a Firebug mówi mi, że dane są niezdefiniowane. W Firebug widzę json.responseText
i jest dobry i prawidłowy, ale dziwne jest, gdy kopiuję wiersz:
var data = eval("(" +json.responseText + ")");
w konsoli Firebug działa i mogę uzyskać dostęp do danych.
Czy ktoś ma rozwiązanie?
javascript
jquery
json
firebug
local-files
Patrick Browne
źródło
źródło
JSON
ciągu już pobierasz obiekt javascript, nie musisz go używaćeval()
.test.json
nie określa żadnej ścieżki, dlatego jest względnym identyfikatorem URI względem lokalizacji strony, która ma do niego dostęp. Tak jak @ seppo0010 mówi, że będzie lokalny dla serwera, jeśli strona znajduje się gdzieś na zdalnym serwerze i będzie względny w stosunku do twojego komputera, jeśli strona znajduje się w lokalnym systemie plików, do któregofile://
protokół ma dostęp.Odpowiedzi:
$.getJSON
jest asynchroniczny, dlatego powinieneś:źródło
Miałem tę samą potrzebę (aby przetestować moją aplikację angularjs), a jedynym sposobem, jaki znalazłem, jest użycie wymaga.js:
Uwaga: plik jest ładowany raz, kolejne wywołania wykorzystają pamięć podręczną.
Więcej informacji na temat czytania plików za pomocą nodejs: http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
need.js: http://requirejs.org/
źródło
jest.dontMock('./data.json');
, w przeciwnym razie wynik będzie pusty. Może się przydać komuś tam :)json
?has not been loaded yet for context: _. Use require([])
W bardziej nowoczesny sposób możesz teraz korzystać z interfejsu API pobierania :
Wszystkie nowoczesne przeglądarki obsługują interfejs API Fetch. (Internet Explorer nie, ale Edge ma!)
źródło:
Korzystanie z pobierania
Pobierz w akcji
Mogę uzyć...?
źródło
file://
schematu.) Ale to jest całkiem czyste podejście. Zacząłem używać go dzięki tej odpowiedzi.Jeśli chcesz pozwolić użytkownikowi wybrać lokalny plik json (w dowolnym miejscu w systemie plików), działa następujące rozwiązanie.
Używa korzysta z FileReader i JSON.parser (i bez jquery).
Oto dobre wprowadzenie do FileReadera: http://www.html5rocks.com/en/tutorials/file/dndfiles/
źródło
newArr
Jeśli szukasz czegoś szybkiego i brudnego, po prostu załaduj dane do nagłówka dokumentu HTML.
data.js
index.html
main.js
Powinienem wspomnieć, że Twój rozmiar sterty (w Chrome) wynosi około 4 GB, więc jeśli twoje dane są większe, powinieneś znaleźć inną metodę. Jeśli chcesz sprawdzić inną przeglądarkę, spróbuj tego:
źródło
Wersja ES5
Wersja ES6
źródło
file:///
protokołu, a plik nie może już być uważany za lokalny.Nie mogę uwierzyć, ile razy udzielono odpowiedzi na to pytanie, nie rozumiejąc i / lub nie rozwiązując problemu z faktycznym kodem Pierwotnego Postera. To powiedziawszy, sam jestem początkujący (tylko 2 miesiące kodowania). Mój kod działa idealnie, ale możesz sugerować wszelkie zmiany w nim. Oto rozwiązanie:
Oto krótszy sposób napisania tego samego kodu, który podałem powyżej:
Możesz także użyć $ .ajax zamiast $ .getJSON, aby napisać kod dokładnie w ten sam sposób:
Wreszcie, ostatnim sposobem jest zawinięcie $ .ajax w funkcji. Nie mogę przypisać sobie tego, ale trochę go zmodyfikowałem. Przetestowałem to i działa i daje takie same wyniki jak mój kod powyżej. Znalazłem to rozwiązanie tutaj -> załaduj JSON do zmiennej
Plik test.json widoczny w powyższym kodzie znajduje się na moim serwerze i zawiera ten sam obiekt danych json, który opublikował (oryginalny plakat).
źródło
Dziwi mnie, że nie wymieniono importu z es6 (używaj z małymi plikami)
Dawny:
import test from './test.json'
webpack 2 <używa
json-loader
domyślnie.json
plików.https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore
W przypadku TypeScript :
Aby go uruchomić, musiałem najpierw zadeklarować moduł. Mam nadzieję, że zaoszczędzi to komuś kilka godzin.
Gdybym próbował pominąć
loader
zejson-loader
mam następujący błąd zwebpack
:źródło
Wypróbuj w taki sposób (ale pamiętaj też, że JavaScript nie ma dostępu do systemu plików klienta):
źródło
Ostatnio D3js jest w stanie obsłużyć lokalny plik json.
To jest problem https://github.com/mbostock/d3/issues/673
To jest łatka dla D3 do pracy z lokalnymi plikami json. https://github.com/mbostock/d3/pull/632
źródło
Znalazłem ten wątek podczas próby (bezskutecznie) załadowania lokalnego pliku json. To rozwiązanie działało dla mnie ...
... i jest używany w ten sposób ...
... a to jest
<head>
...źródło
W TypeScript możesz użyć importu, aby załadować lokalne pliki JSON. Na przykład ładowanie font.json:
Wymaga to flagi tsconfig --resolveJsonModule:
Aby uzyskać więcej informacji, zobacz informacje o wersji maszynopisu: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html
źródło
W angular (lub dowolnym innym frameworku), możesz załadować używając http get Używam go mniej więcej tak:
Mam nadzieję że to pomoże.
źródło
To, co zrobiłem, to trochę zmodyfikowałem plik JSON.
myfile.json
=>myfile.js
W pliku JSON (ustaw zmienną JS)
{name: "Whatever"}
=>var x = {name: "Whatever"}
Na końcu,
export default x;
Następnie,
import JsonObj from './myfile.js';
źródło
Jeśli używasz lokalnej tablicy dla JSON - jak pokazano w przykładzie w pytaniu (test.json), możesz użyć
parseJSON()
metody JQuery ->getJSON()
służy do pobierania JSON ze strony zdalnej - nie będzie działać lokalnie (chyba że używasz lokalnego serwera HTTP)źródło
źródło
Podejście, które lubię stosować, to wstawić / owinąć Json literałem obiektu, a następnie zapisać plik z rozszerzeniem .jsonp. Ta metoda pozostawia również oryginalny plik json (test.json) bez zmian, ponieważ zamiast tego będziesz pracować z nowym plikiem jsonp (test.jsonp). Nazwa na opakowaniu może być dowolna, ale musi być taka sama jak funkcja wywołania zwrotnego, której używasz do przetwarzania pliku jsonp. Wykorzystam twój test.json opublikowany jako przykład, aby pokazać dodanie opakowania jsonp dla pliku „test.jsonp”.
Następnie utwórz w skrypcie zmienną wielokrotnego użytku o zasięgu globalnym, aby przechowywać zwracany JSON. Dzięki temu zwrócone dane JSON będą dostępne dla wszystkich innych funkcji w skrypcie zamiast tylko funkcji wywołania zwrotnego.
Dalej jest prosta funkcja do odzyskania twojego jsona przez wstrzyknięcie skryptu. Zauważ, że nie możemy tutaj użyć jQuery do dołączenia skryptu do nagłówka dokumentu, ponieważ IE nie obsługuje metody .append jQuery. Metoda jQuery skomentowana w poniższym kodzie będzie działać w innych przeglądarkach, które obsługują metodę .append. Jest on dołączony jako odniesienie, aby pokazać różnicę.
Dalej jest krótka i prosta funkcja wywołania zwrotnego (o tej samej nazwie co opakowanie jsonp), aby pobrać dane wyników json do zmiennej globalnej.
Do danych json można teraz uzyskać dostęp za pomocą dowolnej funkcji skryptu za pomocą notacji kropkowej. Jako przykład:
Ta metoda może nieco różnić się od tego, do czego jesteś przyzwyczajony, ale ma wiele zalet. Po pierwsze, ten sam plik jsonp można załadować lokalnie lub z serwera za pomocą tych samych funkcji. Jako bonus, jsonp jest już w formacie przyjaznym dla wielu domen i może być również łatwo używany z interfejsami API typu REST.
To prawda, że nie ma żadnych funkcji obsługi błędów, ale dlaczego miałbyś ich potrzebować? Jeśli nie możesz uzyskać danych JSON przy użyciu tej metody, możesz założyć się, że masz pewne problemy w samym JSONie i sprawdziłbym to na dobrym walidatorze JSON.
źródło
Możesz umieścić swój Json w pliku javascript. Można to załadować lokalnie (nawet w Chrome) za pomocą
getScript()
funkcji jQuery .plik map-01.js:
main.js
wynik:
Zauważ, że zmienna json jest zadeklarowana i przypisana w pliku js.
źródło
Nie znalazłem żadnego rozwiązania przy użyciu biblioteki Google Closure. Aby uzupełnić listę przyszłych vistorów, oto jak załadować JSON z pliku lokalnego za pomocą biblioteki Closure:
źródło
Zrobiłem to dla mojej aplikacji Cordova, tak jak utworzyłem nowy plik javascript dla JSON i wkleiłem dane JSON,
String.raw
a następnie parsowałem je za pomocąJSON.parse
źródło
JavaScript Object Notation
(JSON):obj = [{"name": "Jeeva"}, {"name": "Kumar"}]
JSON.parse
do konwersji na obiekt JavaScriptTo, co zrobiłem, to przede wszystkim z karty sieciowej, zanotuj ruch sieciowy dla usługi oraz z treści odpowiedzi, skopiuj i zapisz obiekt json w pliku lokalnym. Następnie wywołaj funkcję z lokalną nazwą pliku, powinieneś zobaczyć obiekt json w powyższym jsonOutout.
źródło
Dla mnie zadziałało:
Wejście:
Kod JavaScript:
źródło
Jeśli masz zainstalowany Python na komputerze lokalnym (lub nie masz nic przeciwko instalacji), oto niezależne od przeglądarki obejście problemu lokalnego dostępu do pliku JSON, którego używam:
Przekształć plik JSON w JavaScript, tworząc funkcję, która zwraca dane jako obiekt JavaScript. Następnie możesz załadować go tagiem <script> i wywołać funkcję, aby uzyskać potrzebne dane.
Nadchodzi kod Python
źródło