Forum: D Programlama Dili RSS
JSON element sırası
zafer #1
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: JSON element sırası
Merhaba,

Aşağıdaki gibi bir json verim var. Bu veriyi string formatına çevirip kullanmak istiyorum. Ancak bu çevrimi yaptığımda elemenler aynı sırada olmalı ancak çıktı farklı oluyor. Bu konuda fikri olan var mı?

import std.stdio;
import std.json;
 
void main()
{
    JSONValue request;
    request["conversationId"] = "123456789";
    request["locale"] = "tr";
    request["binNumber"] = "542119";
 
    writefln("--> %s", request.toString());
}

Kodun çıktısı:
--> {"binNumber":"542119","conversationId":"123456789","locale":"tr"}
https://github.com/zafer06 - depo
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4586 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
std.json, alanları eşleme tablosu (associative array) olarak tuttuğu için öyle oluyor. json standardında sıra önemli olmadığından sorun olarak görmemiş olmalılar.

Ali
zafer #3
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
std.json, alanları eşleme tablosu (associative array) olarak tuttuğu için öyle oluyor. json standardında sıra önemli olmadığından sorun olarak görmemiş olmalılar.

Ali

Anlıyorum. Sanırım pek umut yok ama yinede sormak istiyorum. İstediğim gibi sıralı olarak çevrim yapabilmek için bir olanak var mı?
https://github.com/zafer06 - depo
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4586 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Tahminimde yanılmışım: Tam tersine, özellikle sıralıyorlarmış:

  https://dlang.org/phobos/std_json.html#.toJSON

"Any Object types will be serialized in a key-sorted order."

Koda baktım, JSON_TYPE.OBJECT çeşidinden verilere .object ile erişilebiliyor:
    writeln(request.object.keys);
Onu yazdırınca baştan söylediğim gibi belirsiz sırada çıkıyorlar. (Ama tesadüf: Gösterdiğin anahtarlar yine de aynı sırada çıkıyorlar. :) )

Yani, request.object eşleme tablosu isteğe göre kullanılabilir ama değerlere alan sıralamasına göre tek tek erişmek gerek.

Başka bir yöntem, en sonunda JSON'dan tekrar dönüştürmek olabilir ama o da ayrıca dertli. :-/

Ali
zafer #5
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler Ali. Artık başka bir yol bulacağız çözüm için.
https://github.com/zafer06 - depo
kerdemdemir #6
Üye Eyl 2013 tarihinden beri · 151 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Zafer eğer vibe-d 'yi projeye almanda sakınca yoksa birde vibe-d'nin json'ı ile dene istersen. Bende json ile birşey yazdırıcam senin bu probleminede bakarım bir kaç güne . Yazarım eğer vibe-d 'de aynı sorun yaşanıyormu diye.
zafer #7
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bu işlem bana iyzico için geliştirdiğim istemci projesinde gerekiyordu. Bu projemi duyurular bölümünde yayınlamıştım. Bu projede nesne tabanlı ve tamamen d olanakları ile ilerlemek istiyorum. Bu sebeple vibe.d modüllerini kullanmayacağım. Ancak vibe.d'nin JSON modülünü daha kullanışlı bulduğumu söylemeliyim :)

Bununla beraber eğer imkanın olursa vibe.d üzerinde deneme yapıp sonuçları burada paylaşırsan çok memnum olurum.
https://github.com/zafer06 - depo
kerdemdemir #8
Üye Eyl 2013 tarihinden beri · 151 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Zafer selam,

Vibe.d gerçekten çok iyi şuna benzer bir struct'ım vardı.

struct AnalyzeData
{
    string recieverName;
    string txName;
    TickData tickData;   
    VolumeData volumeData;
    double count = 0.0;
    double maxBid  = 0.0;
    double prevMaxBid  = 0.0;
}

Hiç uğraşmadan gittim şunu çağırdım:

        auto returnVal = this.analyzeData.serializeToJsonString();
        writeln(returnVal);
        return returnVal;

Valla sağolsun çatır çatır yazdı:

{"recieverName":"1ST","txName":"BTC","tickData":{"bid":3.971e-05,"ask":4e-05,"last":3.971e-05},"volumeData":{"prevVolumeInBTC":null,"prevVolume":null,"volumeInBTC":183.71350973,"volume":4606464.91722863},"count":0,"maxBid":0,"prevMaxBid":0}

Struct'da belirttiğim sıra ne ise ona göre yazdı öyle sort-mort etmedi.
kerdemdemir #9
Üye Eyl 2013 tarihinden beri · 151 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Çok ilginç,  birşeyler daha ekleyim dedim

        auto json = analyzeData.serializeToJson();
        json["birsey"] = "Erdem";  --> Tam böyle değil biraz değişik ama anlaşılmıştır umarım

{"birsey":"Erdem","count":0,"prevMaxBid":0,"prevTickData":{"last":0,"ask":0,"bid":0},
"maxBid":0,"recieverName":"1ST","tickData":{"last":4.047e-05,"ask":4.047e-05,"bid":4.045e-05},"txName":"BTC",
"volumeData":{"prevVolumeInBTC":null,"prevVolume":null,"volumeInBTC":175.04975521,"volume":4405367.44241026}}

Yani [] operatörünü kullanıp birşeyler eklediğim anda sortladı. Benim için bir sakıncası yok vibe.d hala 10 numero. Fakat bilgin olsun diye yazmak istedim.

Erdemdem
Bu mesaj kerdemdemir tarafından değiştirildi; zaman: 2017-12-20, 23:35.
zafer #10
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Vibe.d bizim canımız ciğerimiz Erdem ;) Şaka bir tarafa vibe.d'yi seviyorum ve çalışmalarımı da onun üstüne yoğunlaştırdım. Şu an vibe.d ile bir rest api yazıyorum.

Vibe.d serileştirme konusunda gerçekten çok pratik daha önce kullanmıştım. Ancak önceki mesajda da söylediğim gibi şimdilik d olanakları ile ilerlemek istiyorum. Paylaşım için teşekkürler Erdem.

İkinci mesajındaki durum acaba serileştirme için farklı bir metod kullanmaktan kaynaklı olabilir mi? İlk mesajda kullandığın serializeToJsonString() metodu appender kullanıyor. Sanırım bu yüzden sıra bozulmuyor. İkinci metod ise büyük ihtimal arka tarafta yine eşleme tablosu kullanıyor diye düşünüyorum. Yanılıyorda olabilirim tabi.
https://github.com/zafer06 - depo
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2018-01-18, 13:39:07 (UTC -08:00)