Створення JSON динамічно з кожним вхідним значенням за допомогою jquery


91

У мене виникла ситуація, коли я хотів би прочитати деякі дані з формату JSON через PHP, однак у мене виникають проблеми з розумінням того, як я повинен побудувати об’єкт Javascript для динамічного створення формату JSON.

Мій сценарій такий:

<input title="QA" type="text" class="email">
<input title="PROD" type="text" class="email">
<input title="DEV" type="text" class="email">

Код Javascript, який я маю до цього часу, проходить через кожен вхід, захоплює дані, однак я не можу зрозуміти, як обробляти з цього моменту.

var taskArray = {};

$("input[class=email]").each(function() {
  var id = $(this).attr("title");
  var email = $(this).val();

  //how to create JSON?

});

Я хотів би отримати наступний результат, якщо це можливо.

[{title: QA, email: 'a@a.com'}, {title: PROD, email: 'b@b.com'},{title: DEV, email: 'c@c.com'}]

Де електронне повідомлення отримується за значенням поля введення.

Відповіді:


273

Подобається це:

function createJSON() {
    jsonObj = [];
    $("input[class=email]").each(function() {

        var id = $(this).attr("title");
        var email = $(this).val();

        item = {}
        item ["title"] = id;
        item ["email"] = email;

        jsonObj.push(item);
    });

    console.log(jsonObj);
}

Пояснення

Ви шукаєте an array of objects. Отже, ви створюєте порожній масив. Створіть об'єкт для кожного input, використовуючи "title" та "email" як ключі. Потім ви додаєте кожен з об’єктів до масиву.

Якщо вам потрібна рядок, тоді зробіть

jsonString = JSON.stringify(jsonObj);

Зразок результату

[{"title":"QA","email":"a@b"},{"title":"PROD","email":"b@c"},{"title":"DEV","email":"c@d"}] 

Чому в цих 3 прикладах я завжди це отримую? 'Uncaught ReferenceError: jsonObj is not defined'
Джино

@Gino Ви скопіювали вставку або друк? Див. Рядок, який визначає jsonObj.
ATOzTOA

15

Я не думаю, що ви можете перетворити об'єкти JavaScript у рядки JSON, використовуючи лише jQuery, припускаючи, що вам потрібен рядок JSON як вихід.

Залежно від оглядачів, на які ви націлюєтесь, ви можете використовувати JSON.stringifyфункцію для створення рядків JSON.

Для отримання додаткової інформації див. Http://www.json.org/js.html , там ви також можете знайти синтаксичний аналізатор JSON для старих браузерів, які спочатку не підтримують об’єкт JSON.

У вашому випадку:

var array = [];
$("input[class=email]").each(function() {
    array.push({
        title: $(this).attr("title"),
        email: $(this).val()
    });
});
// then to get the JSON string
var jsonString = JSON.stringify(array);

10

Можливо, це допоможе, я віддаю перевагу чистому JS, де це можливо, це суттєво покращує продуктивність, оскільки у вас не буде багато викликів функції JQuery.

var obj = [];
var elems = $("input[class=email]");

for (i = 0; i < elems.length; i += 1) {
    var id = this.getAttribute('title');
    var email = this.value;
    tmp = {
        'title': id,
        'email': email
    };

    obj.push(tmp);
}

Big + 1 пішов із цим рішенням, прийнята відповідь викликала у мене деякі проблеми в IE
Bobadevv

0

те саме з наведеного вище прикладу - якщо ви просто шукаєте json (а не масив об'єктів), просто використовуйте

function getJsonDetails() {
      item = {}
      item ["token1"] = token1val;
      item ["token2"] = token1val;
      return item;
}
console.log(JSON.stringify(getJsonDetails()))

цей вивід буде друкувати як (дійсний json)

{ 
   "token1":"samplevalue1",
   "token2":"samplevalue2"
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.