Thread overview
JSON element sırası
Dec 11, 2017
zafer
Dec 11, 2017
zafer
Dec 12, 2017
zafer
Dec 16, 2017
kerdemdemir
Dec 17, 2017
zafer
Dec 20, 2017
kerdemdemir
Dec 20, 2017
kerdemdemir
Dec 21, 2017
zafer
December 11, 2017

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ı:
Alıntı:

>

--> {"binNumber":"542119","conversationId":"123456789","locale":"tr"}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 11, 2017

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 11, 2017

Alıntı (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ı?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 12, 2017

Teşekkürler Ali. Artık başka bir yol bulacağız çözüm için.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 12, 2017

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 16, 2017

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 17, 2017

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 20, 2017

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 20, 2017

Ç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 gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 21, 2017

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() (https://github.com/vibe-d/vibe.d/blob/master/data/vibe/data/json.d#L1368) 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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]