Как вы импортируете JSON файл в JavaScript?

У меня есть файл JSON с контентом

{"name" : "Conrad", "info" : "tst", "children" : [
    {"name" : "Rick" },
    {"name" : "Lynn" },
    {"name" : "John", "children": [
        {"name" : "Dave", "children": [
            {"name" : "Dave" },
            {"name" : "Chris" }      
        ]},
        {"name" : "Chris" }
    ]}
  ]};

Я хочу импортировать данные JSON файла внутри файла JavaScript и иметь конечный результат, например

var treeData ={"name" : "Conrad", "info" : "tst", "children" : [
        {"name" : "Rick" },
        {"name" : "Lynn" },
        {"name" : "John", "children": [
                {"name" : "Dave", "children": [
                {"name" : "Dave" },
                {"name" : "Chris" }

         ] },
                {"name" : "Chris" }
         ]}
  ]};

Я пробовал много примеров кода, но никто не работал.

Ответ 1

Разберите содержимое файла следующим образом:

var treeData = JSON.parse(fileContent);

Вы не описываете, как вы получаете файл, но можете загрузить его с сервера с помощью простого XMLHttpRequest. Вот для этого полезный ресурс: Использование XMLHttpRequest

Выдержка из ссылки с изменениями:

var treeData;

var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.open("get", "yourFile.txt", true);
oReq.send();

function reqListener(e) {
    treeData = JSON.parse(this.responseText);
}

Обновить на основе комментариев ниже:

Вы не можете загрузить файл с помощью JSON.parse(). Эта функция способна преобразовывать существующую строку в объект (если контент находится в допустимом формате JSON).

Вам необходимо:

  • Загрузите файл с вашего сервера в переменную, используя, например, AJAX (как показано). Из-за соображений безопасности вы не можете использовать локальный путь к файлу. Настройте локальный сервер для запуска вашей страницы, например, бесплатный легкий веб-сервер Mongoose. Это позволит вам указать корень в вашу локальную папку, а затем загрузить свою страницу с помощью http://localhost/

  • Когда файл загружен, вы можете передать содержимое функции JSON.parse(). В приведенном выше примере показан весь процесс. Просто замените ссылки на фактические в вашем коде.

(PS: если вы хотите, чтобы решение jQuery не задевало ваш вопрос тегом jQuery)

Ответ 2

Как насчет $.getJSON

$.getJSON( "yourjsonfile.json", function( data ) {  
    console.log( "JSON Data: " + data);
    $.each( data, function( key, val ) {
        console.log(key + "value:: " + val );
    });
});

Ссылка: http://api.jquery.com/jquery.getjson/

Ответ 3

Сделайте запрос AJAX вашего JSON файла, затем используйте JSON.parse, чтобы добавить результат в treeData.

var treeData = JSON.parse(ajaxFunction('jsonfile.php'));

Что-то в этом отношении... (он будет зависеть от вашей функции AJAX)

Ответ 4

Если кто-то использует GULP, то вот как вы можете решить:

var gulp = require('gulp'),
    concat = require('gulp-concat'),
    insert = require('gulp-insert');

gulp.task('jsonConcat', function() {
  return gulp.src(['path/to/json/your-file.json'])
    .pipe(insert.prepend('treeData = '))
    .pipe(insert.append(';'))
    .pipe(concat('final-result.js'))
    .pipe(gulp.dest('path/to/destination/'));
});