2012-06-18 5 views
68

У меня есть объект JSON в формате ниже:Как создать объект JSON с помощью JQuery

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

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

ответ

25

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

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

Если вы хотите создать JavaScript Object, просто сделать это следующим образом:

var yourObject = { 
      test:'test 1', 
      testData: [ 
       {testName: 'do',testId:''} 
      ], 
      testRcd:'value' 
}; 
+1

@guillaumealgis, вы можете объяснить свой откат к моему редактировать? Если вы запустите объект через [JSONLint] (http://jsonlint.com/), он будет помечен как недопустимый (левые ключи должны быть двойными). Я не утверждаю, что вы ошибаетесь, я хочу узнать, почему вы считаете, что это действительно JSON, потому что это может быть то, что я не понимаю. Если вы запускаете мою версию с помощью одного и того же валидатора, она возвращается как действительный JSON. – delliottg

+1

@delliottg Не используйте проверку подлинности JSON для проверки JavaScript. Пожалуйста, прочтите мой ответ еще раз. –

+2

@delliottg Я не говорю, что это действительный JSON. Целью этого ответа является разграничение JSON объекта JS. Попробуйте запустить код dystroy в интерпретаторе JS, и вы увидите, что он работает отлично. –

177

Просто поместите ваши данные в объект, как это:

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

После stringify его помощью:

var myString = JSON.stringify(myObject); 

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

+2

Можно ли динамически создавать индексное имя. для ex: var name = $ ('# myname').Val(); myObject.name = "john" // здесь индекс имени будет dinamaclly из поля ввода. –

+3

Ошибка для приведенного выше комментария. Чтобы заменить любые статические значения, такие как '.name'' .age' или' .pets', просто замените это, включая точку, переменной, заключенной в квадратные скобки. Пример: 'myObject [cssProp] = cssVal;' Тогда любые значения этих двух css-переменных будут использоваться в объекте. Вот jsFiddle: [http://fiddle.jshell.net/arttronics/rucjtbza/](http://fiddle.jshell.net/arttronics/rucjtbza/) – arttronics

4

Я считаю, что он просит написать новый 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 
?> 
-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) { 

         } 
        }); 
+0

Это хорошо, но вопрос не связан с C# или ASP – Machavity

+0

@Machavity, где вы находите C# в этом? –

+1

Этот комментарий был о первом пересмотре вашего ответа, в котором был C#. Теперь это делает еще меньше смысла, поскольку вы жестко кодируете переменную 'model'. Этот вопрос: _ «В JavaScript, как я могу создать объект во время выполнения и представлять этот объект в нотации JSON» _, который ваш ответ по-прежнему не отображается. – CodeCaster

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

Смежные вопросы