Как создать объект JSON с помощью jQuery

80

У меня есть объект JSON в формате ниже:

temp:[
        {
           test:'test 1',
           testData:  [ 
                       {testName: 'do',testId:''}
                         ],
           testRcd:'value'                             
        },
        {
            test:'test 2',
           testData:  [
                            {testName: 'do1',testId:''}
                         ],
           testRcd:'value'                           
        }
      ],

Как я могу создать объект JSON в jquery для указанного выше формата. Я хочу создать динамический объект JSON.

user1462958
источник

Ответы:

213

Просто поместите свои данные в объект следующим образом:

var myObject = new Object();
myObject.name = "John";
myObject.age = 12;
myObject.pets = ["cat", "dog"];

Затем сделайте его строковым:

var myString = JSON.stringify(myObject);

Для этого вам не нужен jQuery. Это чистый JS.

Тим
источник
2
Возможно ли динамическое создание имени индекса. например: var name = $ ('# myname'). val (); myObject.name = "john" // здесь индекс имени будет динамически выбираться из поля ввода.
Md. Sahadat Hossain
3
Удар для приведенного выше комментария: заменить любое из статических значений, таких как .name .ageили .petsпросто заменить его, включая точку, переменной, заключенной в квадратные скобки. Пример: myObject[cssProp] = cssVal;тогда любые значения этих двух переменных css будут использоваться в Object. Вот jsFiddle: http://fiddle.jshell.net/arttronics/rucjtbza/
arttronics
31

«Объект JSON» не имеет смысла: JSON - это формат обмена, основанный на структуре объявления объекта Javascript.

Если вы хотите преобразовать объект javascript в строку json, используйте JSON.stringify(yourObject);

Если вы хотите создать объект javascript, просто сделайте это так:

var yourObject = {
          test:'test 1',
          testData: [ 
                {testName: 'do',testId:''}
          ],
          testRcd:'value'   
};
Дени Сегюре
источник
1
@guillaumealgis, не могли бы вы объяснить свой откат к моему редактированию? Если вы запускаете объект через JSONLint, он помечается как недопустимый (левые клавиши должны быть заключены в двойные кавычки). Я не утверждаю, что вы ошибаетесь, я хочу узнать, почему вы считаете, что это действительный JSON, потому что это может быть то, чего я не понимаю. Если вы запустите мою версию через тот же валидатор, она вернется как действительный JSON.
delliottg
1
@delliottg Не используйте валидатор JSON для проверки JavaScript. Прочтите, пожалуйста, начало моего ответа еще раз.
Denys Séguret
2
@delliottg Я не говорю, что это действительный JSON. Смысл этого ответа - отличить JSON от объекта JS. Попробуйте запустить код dystroy в интерпретаторе JS, и вы увидите, что он работает нормально.
Гийом Альгис
3
Спасибо за комментарии, ребята, я понял, что у меня есть фундаментальное непонимание того, как это работает, после того, как я прочитал это снова и задал свой вопрос о проекте, над которым я работаю. Я почти уверен, что теперь понимаю, и спасибо за ваше терпение.
delliottg
5

Я полагаю, он просит записать новый json в каталог. Вам понадобится Javascript и PHP. Итак, чтобы отбросить другие ответы:

script.js

var yourObject = {
  test:'test 1',
  testData: [ 
    {testName: 'do',testId:''}
   ],
   testRcd:'value'   
};
var myString = 'newData='+JSON.stringify(yourObject);  //converts json to string and prepends the POST variable name
$.ajax({
   type: "POST",
   url: "buildJson.php", //the name and location of your php file
   data: myString,      //add the converted json string to a document.
   success: function() {alert('sucess');} //just to make sure it got to this point.
});
return false;  //prevents the page from reloading. this helps if you want to bind this whole process to a click event.

buildJson.php

<?php
    $file = "data.json";  //name and location of json file. if the file doesn't exist, it   will be created with this name

    $fh = fopen($file, 'a');  //'a' will append the data to the end of the file. there are other arguemnts for fopen that might help you a little more. google 'fopen php'.

    $new_data = $_POST["newData"]; //put POST data from ajax request in a variable

    fwrite($fh, $new_data);  //write the data with fwrite

    fclose($fh);  //close the dile
?>
smulholland2
источник
1

Как получить значение поля ввода как json, например

temp:[
        {
           test:'test 1',
           testData:  [ 
                       {testName: 'do',testId:''}
                         ],
           testRcd:'value'                             
        },
        {
            test:'test 2',
           testData:  [
                            {testName: 'do1',testId:''}
                         ],
           testRcd:'value'                           
        }
      ],
Engrmukul
источник
0

Вложенный JSONобъект

var data = {
        view:{
            type: 'success', note:'Updated successfully',
        },
    };

Вы можете разобрать это data.view.typeиdata.view.note

JSON Объект и внутри массива

var data = {
          view: [ 
                {type: 'success', note:'updated successfully'}
          ],  
     };

Вы можете разобрать это data.view[0].typeиdata.view[0].note

Тамараисельвам
источник
-1
var model = {"Id": "xx", "Name":"Ravi"};
$.ajax({    url: 'test/set',
                        type: "POST",
                        data: model,
                        success: function (res) {
                            if (res != null) {
                                alert("done.");
                            }
                        },
                        error: function (res) {

                        }
                    });
Рави Ананд
источник
Это хорошо, но вопрос не
касается
@Machavity, а где в этом C #?
Рави Ананд,
1
Этот комментарий касался первой версии вашего ответа, в которой был C #. Теперь это имеет еще меньше смысла, поскольку вы жестко кодируете modelпеременную. Это вопрос: «В JavaScript, как я могу создать объект во время выполнения и представить этот объект в нотации JSON» , который в вашем ответе все еще не отображается.
CodeCaster