Jump to content
  • 0

Сохранение файла в переменную


alex_web64
 Share

Question

Здравствуйте.
Опишу на примере, что мне нужно:

Есть json-файл:
 

{
    "1": "one",
    "2": "two",
    "3": "three"
}

Пример того, как бы я работал с js:

var json;

$.getJSON('my.json', function(data){
    json = data;
});

// файл один раз подгружаю, сохраняю в переменную и дальше работаю с ней.

Вопрос, как сделать похожее (не грузить каждый раз json-файл) на php за исключением того, что пользователю вместо всего файла отдается значение одного из ключей? Сейчас код такого вида:

$str = file_get_contents('my.json');
$json = json_decode($str);
echo json_encode($json->{'1'});

 

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Может и вариант, я в пхп ничего не смыслю. Главное условие, что пользователь не должен получать весь файл одним запросом, а только как ключ-значение. Если ваше решение подходит под это описание, то напишите, где можно почитать подробнее, как с ним работать.

Link to comment
Share on other sites

  • 0

Тут php не нужен. В первый раз пользователю придется скачать весь файл json. Затем при каждой загрузке страницы забираем значение из локального хранилища и оперируем им. Storage mdn

setValueInStorage("1", function(str) {
  // делаем с нашей строкой все что вздумается
  document.write(str);
});

function setValueInStorage(key, callback) {
  if (('myvalue' in localStorage)) return callback(localStorage.myvalue);

  var json, value;

  $.getJSON('my.json', function(data){
    json = data;
    value = json[key];

    localStorage.myvalue = value;
    callback(value);
  });
}

 

Edited by by chris
Link to comment
Share on other sites

  • 0
2 часа назад, alex_web64 сказал:

как сделать похожее (не грузить каждый раз json-файл) на php

А чего страшного в открытии файла на сервере? Операция плёвая и не создаёт ощутимой нагрузки, если, конечно, у Вас не файл с миллионами строк. Его хранить в сессии не стоит. Открывайте каждый раз файл и декодируйте, по скорости это быстрее даже, чем декод XML. Обычная практика, проще говоря. 

UPD: совсем забыл, что бы оперировать с ключами декодированного JSON, нужно декодировать с преобразованием в ассоциативный массив, т.е.

<?php
$str = file_get_contents('my.json');
// Указываем аргумент $assoc в true для преобразования в ассоциативный массив
// Подробнее http://php.net/manual/ru/function.json-decode.php
$json = json_decode($str, true);
echo json_encode($json[1]);// Нужный вам ключ, например 1

 

15 минут назад, by chris сказал:

Тут php не нужен

Разве ТС сказал, что ему нужен тут JS? ТС вроде явно указал, что нужно сделать на PHP.

К тому же это проще и надежнее сделать на PHP.

Edited by BrusSENS
  • Like 1
Link to comment
Share on other sites

  • 0
1 час назад, by chris сказал:

Конечно, конечно. Пусть делает на php.

Локальный трафик, закрытые директории и безопасность данных надеюсь для Вас это не пустой звук. Потому и PHP.

Link to comment
Share on other sites

  • 0
12 часа назад, BrusSENS сказал:

Локальный трафик, закрытые директории и безопасность данных надеюсь для Вас это не пустой звук. Потому и PHP.

Увы, увы.. Никто не спорит.

Link to comment
Share on other sites

  • 0
В 20.11.2016 в 20:13, alex_web64 сказал:

Здравствуйте.
Опишу на примере, что мне нужно:

Есть json-файл:
 


{
    "1": "one",
    "2": "two",
    "3": "three"
}

Пример того, как бы я работал с js:


var json;

$.getJSON('my.json', function(data){
    json = data;
});

// файл один раз подгружаю, сохраняю в переменную и дальше работаю с ней.

Вопрос, как сделать похожее (не грузить каждый раз json-файл) на php за исключением того, что пользователю вместо всего файла отдается значение одного из ключей? Сейчас код такого вида:


$str = file_get_contents('my.json');
$json = json_decode($str);
echo json_encode($json->{'1'});

 

Можно Storage а можно Cookie

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy