Jquery kullanarak her giriş değeriyle dinamik olarak JSON oluşturma


91

PHP aracılığıyla bir JSON biçiminden bazı verileri okumak istediğim bir durumla karşılaştım, ancak JSON biçimini dinamik olarak oluşturmak için Javascript nesnesini nasıl oluşturmam gerektiğini anlamakta bazı sorunlar yaşıyorum.

Senaryom şu şekilde:

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

Şimdiye kadar sahip olduğum Javascript kodu her girişten geçiyor, verileri alıyor, ancak bundan sonra nasıl işleneceğini anlayamıyorum.

var taskArray = {};

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

  //how to create JSON?

});

Mümkünse aşağıdaki çıktıyı almak istiyorum.

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

E-postanın giriş alanı değeri tarafından alındığı yer.

Yanıtlar:


274

Bunun gibi:

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);
}

Açıklama

Sen arıyorsun an array of objects. Yani boş bir dizi oluşturursunuz. inputAnahtar olarak 'başlık' ve 'e-posta' kullanarak her biri için bir nesne oluşturun . Daha sonra nesnelerin her birini diziye eklersiniz.

Bir dizgeye ihtiyacınız varsa, yapın

jsonString = JSON.stringify(jsonObj);

Örnek Çıktı

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

Neden bu 3 örnekte hep bunu anlıyorum? 'Yakalanmamış Referans Hatası: jsonObj tanımlanmadı'
Gino

@Gino kopyalayıp yapıştırdınız mı yoksa yazdınız mı? JsonObj'yi tanımlayan satıra bakın.
ATOzTOA

15

Çıkış olarak JSON dizesine ihtiyacınız olduğunu varsayarak, JavaScript nesnelerini yalnızca jQuery kullanarak JSON dizelerine dönüştürebileceğinizi sanmıyorum.

Hedeflediğiniz tarayıcılara bağlı olarak, JSON.stringifyJSON dizeleri oluşturmak için bu işlevi kullanabilirsiniz .

Daha fazla bilgi için http://www.json.org/js.html adresine bakın , burada ayrıca JSON nesnesini yerel olarak desteklemeyen eski tarayıcılar için bir JSON ayrıştırıcısı bulabilirsiniz.

Senin durumunda:

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

Bu yardımcı olabilir, mümkün olan her yerde saf JS'yi tercih ederim, çok fazla JQuery işlev çağrınız olmayacağı için performansı önemli ölçüde artırır.

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);
}

Büyük + 1 bu çözüme gitti, kabul edilen cevap IE'de bana bazı sorunlara neden oldu
Bobadevv

0

yukarıdaki örnekten de aynı - sadece json arıyorsanız (bir nesne dizisi değil) sadece

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

bu çıktı olarak yazdırılacak (geçerli bir json)

{ 
   "token1":"samplevalue1",
   "token2":"samplevalue2"
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.