Jump to content
  • 0

JSON вопросы (про массив)


Zverushka
 Share

Question

Вопрос в этом посте (основные 2) - решен. Возник следующий (посты ниже).

Я создаю объект для json данных, чтобы в будущем добавить его к текущим json данным.

Мой json имеет следующую структуру 

{  "ref_matchings": [    {      "keyName": "Oil1",      "keyValue": [        "масло1",        "супермало1",        "Четкое масло1",        "Отличное масло1"      ],      "messages": [        {          "msg1": "1lorem lorem lorem"        },        {          "msg2": "1lorem lorem lorem lorem lorem lorem lorem"        },        {          "msg3": "1Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae, aliquam, ratione, iste doloremque accusamus placeat similique consectetur veritatis dolore itaque voluptatum aut sit adipisci ad id veniam ipsum voluptate rem!"        }      ]    },    {      "keyName": "Oil2",      "keyValue": [        "масло2",        "супермало2",        "Четкое масло2",        "Отличное масло2"      ],      "messages": [        {          "msg1": "2lorem lorem lorem"        },        {          "msg2": "2lorem lorem lorem lorem lorem lorem lorem"        },        {          "msg3": "2Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae, aliquam, ratione, iste doloremque accusamus placeat similique consectetur veritatis dolore itaque voluptatum aut sit adipisci ad id veniam ipsum voluptate rem!"        }      ]    },    {      "keyName": "Oil3",      "keyValue": [        "масло3",        "супермало3",        "Четкое масло3",        "Отличное масло3"      ],      "messages": [        {          "msg1": "3lorem lorem lorem"        },        {          "msg2": "3lorem lorem lorem lorem lorem lorem lorem"        },        {          "msg3": "3Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae, aliquam, ratione, iste doloremque accusamus placeat similique consectetur veritatis dolore itaque voluptatum aut sit adipisci ad id veniam ipsum voluptate rem!"        }      ]    }  ]}

Сейчас я беру и загружаю данные keyValue в textArea и они предоставляются в следующем виде:

масло1,супермало1,Четкое масло1,Отличное масло1

Я хочу добавить новый объект (набор данных в json), но возникает проблема с массивом keyValue.

var ref = {};ref.keyName   = $mainForm.find("#keyName").val();ref.KeyValue  = $mainForm.find("#keyValue").val();

Потом я вывожу данные в консоль console.log(JSON.stringify(ref)); - и вижу 

{"keyName":"Oil2","KeyValue":"масло2,супермало2,Четкое масло2,Отличное масло2"} 

Когда должно быть "KeyValue": ["масло2,супермало2,Четкое масло2,Отличное масло2"] - то есть данные должны быть в квадратных скобках. 

Мне нужно как-то обозначить, что это массив данных - но у меня не получается этого сделать - как обозначить?

Кстати дальше я пытаюсь работать с двумерным массив ref.messages[index][id] = $(this).val(); - и получаю тоже ошибки. Подскажите, как работать с массивами в объекте?

 

Кстати, безопасно ли перезаписывать файл на сервере (переписать json файл методом Post) - не может ли произойти какая-то ошибка, обрыв связи в процессе - что файл останется недозаписанным или еще каким-нибудь образом крашнутым?

Edited by Zverushka
Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

ref.KeyValue = $mainForm.find("#keyValue").val();

 

А html-код этого элемента можно увидеть?

 

 

Подскажите, как работать с массивами в объекте?

 

Ну если у вас двумерный массив в первом вопросе не получился, то как вы с ним можете потом работать?

 

 

Кстати, безопасно ли перезаписывать файл на сервере (переписать json файл методом Post) - не может ли произойти какая-то ошибка, обрыв связи в процессе - что файл останется недозаписанным или еще каким-нибудь образом крашнутым?

 

1. Смотря откуда у вас идет JSON.

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

Link to comment
Share on other sites

  • 0

Подскажите плз - не могу получить данные json в php сценарий. Уже испробовала кучи вариантов - но там пусто.

 $.ajax({type: "post",        url: "form.php",        data: { data: json_data },        success: function(data){          alert("success");        },        error: function(xhr, textStatus, errorThrown) {          console.log(textStatus, errorThrown);        },       contentType: "application/json; charset=utf-8",        //dataType: 'json'      });
<?php$data = json_decode(file_get_contents('php://input'));print_r($data);echo json_decode(file_get_contents("php://input"));var_dump($_POST);echo json_decode($_POST['data']);  if (isset($_POST['data'])) {    echo "isset";   echo json_decode($_POST['data']);   exit();  }  else {    echo "not set json";  }?>

data: { data: json_data },

data: { json_data },

data: { JSON.stringify(json_data) },

data: { data: JSON.stringify(json_data) },

Все тщетно  в сценрии пустота - наблюдаю за этим через консоль - данные пост уходят стабильно - но в сценарии ответ (через консоль) - ничего нет.

Link to comment
Share on other sites

  • 0

Решила эту проблему. Возникла следующая. 

$data = json_decode(file_get_contents('php://input'));print_r($data); 
{"ref_matchings":[{"keyName":"Oil1","keyValue":["масло1","супермало1","Четкое масло1","Отличное масло1"],"messages":[{"msg1":"1lorem lorem lorem"},{"msg2":"1lorem lorem lorem lorem lorem lorem lorem"},{"msg3":"1Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae, aliquam, ratione, iste doloremque accusamus placeat similique consectetur veritatis dolore itaque voluptatum aut sit adipisci ad id veniam ipsum voluptate rem!"}]},{"keyName":"Oil2","keyValue":["масло2","супермало2","Четкое масло2","Отличное масло2"],"messages":[{"msg1":"2lorem lorem lorem"},{"msg2":"2lorem lorem lorem lorem lorem lorem lorem"},{"msg3":"2Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae, aliquam, ratione, iste doloremque accusamus placeat similique consectetur veritatis dolore itaque voluptatum aut sit adipisci ad id veniam ipsum

Я получаю кракозяблы вместо русских символов, хотя Jquery отслывает json в утф8 по умолчанию.  Да и если явно указываю - не помогает.

 

Может у денвера проблемы? так я кинула .access с AddDefaultCharset utf-8 - не помогло.

Edited by Zverushka
Link to comment
Share on other sites

  • 0

Ну и надеюсь последний вопрос.

Вроде все нормально, я получаю данные с сервера

$data = json_decode(file_get_contents('php://input'));  print_r($data);  $data = json_encode($data);  file_put_contents($json_file, $data);  exit();

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

keyValue":["\u0425\u0410\u0425\u04101"," \u0445\u0430\u04303"

ВТФ? и как с этим бороться?

Link to comment
Share on other sites

  • 0

Кстати как думаете следовало включить какую-нибудь библиотеку, которая отформатировала бы код json с отсутпами для записи в файл? Потому что сейчас там все слитно одно к другому

Link to comment
Share on other sites

  • 0

Кодировку смотрите, в какой кодировке у вас файл получился, и какой кодировки файлы страниц, JQuery и обработчика. Они должны быть одинаковыми.

Можно использовать iconv  - для конвертации переменных в нужную кодировку.

Если iconv  не поможет, то можно просто последовательностью fopen()fwrite()fclose()

Upd: я на этих багах с кодировками "собаку съел"  =)

Edited by Николя223
Link to comment
Share on other sites

  • 0

Да, ты знаешь я последние 2 дня провела не столько в разработке кода, сколько по решению, не побоюсь этого слова - кучи проблем с кодировками. При том, что все мои файлы в УТФ8 - это меня не спасло.

Интересно это только у php такие проблемы или у других серверных языков не лучше дела обстоят? Просто для меня сейчас эта та вещь из-за которой мне хочется выбрать для разработки приложений другой язык програмирования, перл например.

Я сейчас более часа потратила на разборки с stripos, при этом strpos c заранее сконвертированными в нижний регистр буквами - также не работал. Сейчас то конечно у меня все заработало, но остались крайне неприятные ощущения после такого рода "программирования". Потому что оно состояло все из борьбы с ослом.

Edited by Zverushka
Link to comment
Share on other sites

  • 0

Это напоминает мне когда я впервые за JS взялся)) мне казалось он работает, а то  не работает, хоть и всё правильно. От перла - боже упаси)) Да - он актуален  до сих пор - возможно, но что то в нем такое что меня отталкивает. Выбирай лучше ruby on rails.  

перл - хардкор, никогда к нему не приду

Edited by Николя223
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