Soru : Appsync hız şablonumda SQL deyimi için JSON nesnesini nasıl dizgiye ekleyebilirim?
Açıklama : JSON veri türüne sahip bir sütuna sahip bir Aurora RDS tablom var. AppSync API zaten RDS'ye bağlı. GraphQL şemam şöyle görünüyor:
input CreateServiceCatalogItemInput {
serviceName: String!
serviceConfig: ServiceConfigInput!
}
type Mutation {
createServiceCatalogItem(input: CreateServiceCatalogItemInput!): ServiceCatalogItem
}
type Query {
getAllServiceCatalogItem: [ServiceCatalogItem]
}
type ServiceCatalogItem {
serviceId: ID!
serviceName: String!
serviceConfig: ServiceConfig!
}
type ServiceConfig {
connectionType: String
capacity: Int
}
input ServiceConfigInput {
connectionType: String
capacity: Int
}
schema {
query: Query
mutation: Mutation
}
CreateServiceCatalogItem mutasyonu için çözümleyicim şöyle görünüyor:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.toString($ctx.args.input.serviceConfig)') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
Bu bana hata veriyor:
Com.amazonaws.deepdish.transform.util.TransformUtils sınıfındaki 'toString' yönteminin çağrılması java.lang.IllegalArgumentException istisnası attı: ... konumunda yanlış sayıda bağımsız değişken
Eğer yaparsam:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.toJson($ctx.args.input.serviceConfig)') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
Bu bana hata veriyor:
JSON belgesi ayrıştırılamıyor: 'Beklenmeyen karakter (' c '(kod 99)): Array girişlerini \ n adresinde ayırmak için virgül bekleniyordu ...
Eğer yaparsam:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$ctx.args.input.serviceConfig') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
Sonra mantıklı bir hata alıyorum:
RDSHttp: {"mesaj": "HATA: json türü için geçersiz giriş sözdizimi \ n Ayrıntı: Simge \" connectionType \ "geçersiz. \ N Konum: 222 \ n Nerede: JSON verisi, satır 1: {connectionType ..." }
Ancak, JSON'yi çözümleyicimde sabit kodladığımda çalışıyor:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '{\"connectionType\":\"ftth\",\"capacity\":1}') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
Peki, {connectionType = ftth, Capacity = 1} öğesini {"connectionType": "ftth", "Capacity": 1} 'ye nasıl dönüştürebilirim? Neyi yanlış yapıyorum veya bir şeyi mi kaçırıyorum? Herhangi bir yardım çok takdir edilecektir.
Bunun gibi bir JSON değişkeni oluşturabilirsiniz:
#set($json = $util.toJson({
"connectionType": "$ctx.args.input.serviceConfig.connectionType", "capacity": $ctx.args.input.serviceConfig.capacity
}))
Ve sorgunuza ekleyin:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.escapeJavaScript($json)' RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
Yukarıdakiler, tüm alıntılar ve kaçışlar nedeniyle biraz zor ama bence kullanımı escapeJavaScriptişe yarayacak.
Veya doğrudan:
{
"version": "2018-05-29",
"statements": [
"INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '{\"connectionType\":\"$ctx.args.input.serviceConfig.connectionType\",\"capacity\": $ctx.args.input.serviceConfig.capacity}') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
1.Çözüm :
@Cyberwombat sayesinde bu sorunu çözebildim. Birisinin ihtiyacı olursa bunu referans olarak gönderiyorum.
Nesnem serviceConfigsabit değil ve zamanla değişebilir, bu yüzden çözümleyicimi daha genel hale getirmek için değiştirdim ve şuna benzer:
#set($serviceConfigMap = {}) #foreach($key in $ctx.args.input.serviceConfig.keySet()) $util.qr($serviceConfigMap.put("$key", $ctx.args.input.serviceConfig.get($key)))
#end
#set($serviceConfigMap = $util.toJson($serviceConfigMap)) { "version": "2018-05-29", "statements": [ "INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.escapeJavaScript($serviceConfigMap)') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
]
}
Eski Çözüm :
Bunu daha önce böyle çözdüm.
Çözümleyicimi Pipeline'a dönüştürdüm ve JSON nesnesini dizgileştirmek için NodeJS'de basit bir Lambda işlevi oluşturdum. Lambda işlevim şöyle görünür:
exports.handler = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify(event.input.serviceConfig).replace(/\"/g, '\\\"'),
};
callback(null, response)
};
ServiceConfig şu anda böyle görünüyor ve tam olarak istediğim gibi:
{\"connectionType\":\"ftth\",\"maxUploadCapacity\":1}"
Artık onu çözümleyicimdeki SQL deyimimde kolayca kullanabiliyorum.
Jana Duggar, aşkı arayışı konusunda açıktı. İşte konu hakkında söylediği her şey ve beş yıllık evlilik penceresi.
Outlander'ın yıldızı Sam Heughan kısa süre önce kendisini yıldız yapan rol olan Jamie Fraser'ı hatırlamak için setten ne alacağını açıkladı.
'She Loves You' bir saatte yazıldı, bir günde kaydedildi ve kariyerlerinin en iyi performanslarından birine sahip The Beatles şarkısı oldu.
Dolly Parton ve büyükannesi Bessie'nin özel bir ilişkisi vardı. Büyükanne Parton çok hastaydı ama bu Dolly'nin ona şaka yapmasını engellemedi.
Meşe veya ceviz ağacının sert olduğunu düşünebilirsiniz, ancak dünyanın en sert ağaçları söz konusu olduğunda, onlara yaklaşamazlar bile.
Okyanus güzelliklerle dolu, ama aynı zamanda gezegenimizin en korkunç deniz canlılarından bazılarını da içinde barındırıyor. Bu hayvanların çoğu, okyanus yüzeyinin çok altında, derin denizin karanlık ve yüksek basınçlı dünyasında gizleniyor.
Düşman yaratıklarla savaşıyorsanız veya PvP senaryolarına hazırlanıyorsanız, Minecraft'taki en iyi kılıç büyülerini bilmek size büyük bir avantaj sağlayabilir. Kılıçları büyülemek daha fazla hasar vermenizi, yaratıklardan düşen düşman sayısını artırmanızı ve kılıcınızın dayanıklılığını uzatmanızı sağlar.
Sosyalist ülkelerden bahsedildiğinde, genellikle tam devlet kontrolü ve özel mülkiyetin olmadığı düşünülür. Ancak pratikte sosyalist ekonomiler büyük farklılıklar gösterir.
“Children”dan ünlü bir konuk oyuncu ve bazı yıkıcı haberler yayınlanıyor
Bu RAV4'ün mükemmel durumda olduğu ve sandalye oyununa hazır olduğu iddia ediliyor.
İtfaiye ekiplerinin yangını söndürmeye çalıştığı görüntüler drone ile görüntülendi.
Eyes of Wakanda doğrudan MCU'ya bağlanıyor ve ayrıca X-Men '97, What If..., Daredevil ve daha fazlasıyla ilgili güncellemeler sunuyor.
'Laguna Beach', 2000'lerin ortalarında lise öğrencileri Lauren Conrad, Kristin Cavallari, Stephen Colletti ve daha fazlasının hayatlarını takip ediyordu. İşte MTV gerçeklik dizisinin oyuncu kadrosunun şu anki hali.
Ava Gardner, Mickey Rooney ve Frank Sintra ile evlenecekti ve birkaç Hollywood yıldızıyla daha çıktı. İşte Ava Gardner'ın çıkma geçmişine bir bakış.
John Cleese, eşi Jennifer Wade ile 2012 yılında evlendi. John Cleese'in eşi Jennifer Wade hakkında bilmeniz gereken her şey burada.
Michael C. Hall, 2016 yılından bu yana eşi Morgan Macgregor ile evli. Michael C. Hall'un eşi hakkında bilmeniz gereken her şey burada.
Çoğu zaman olduğu gibi birdenbire gözüme çarpıyor Her şey yeniden yarı yolda <Hayır, Pasifik'te kesip attığınız değil, karnavalda olan> Her manşet yüksek sesle… ..
2022'de GPT-3'ün piyasaya sürülmesiyle yazma becerisinin önemi azalmış gibi görünüyor. AI ile, zayıf yazıya sahip kişiler de kaliteli personel oluşturabilir.
Günümüzün hızlı tempolu ve rekabetçi dünyasında, kişinin kariyeri kişisel gelişim, finansal istikrar ve genel yaşam memnuniyetinde önemli bir rol oynamaktadır. Bununla birlikte, birçok kişi profesyonel yaşamlarında giderek tükenmekte olan amansız bir durgunluk ve tatminsizlik döngüsüne kapılmış durumda.
Geçen hafta PressGazette (İngiliz medya haber sitesi) aracılığıyla gönderilen bir basın bildirisi fark ettim. Makale, Scandi podcast barındırma ve reklamcılık şirketi Acast'ın podcasting alanında "muhtemelen en etkili" yayıncılardan oluşan bir konsorsiyuma liderlik edeceğini duyurdu.