ছোট জেএসএন মার্শালের সাথে লোয়ারকেস জেএসওনের মূল নাম


175

আমি "encoding/json"আমার অ্যাপ্লিকেশনটির আমদানি করা প্যাকেজগুলির মধ্যে একটিতে ঘোষিত স্ট্রাক মার্শাল করতে প্যাকেজটি ব্যবহার করতে চাই।

যেমন .:

type T struct {
    Foo int
}

কারণ এটি আমদানি করা হয়েছে, স্ট্রাক্টে সমস্ত উপলব্ধ (রফতানি করা) ক্ষেত্রগুলি একটি বড় হাতের অক্ষর দিয়ে শুরু হয়। তবে আমি নিম্ন কেসের মূল নামগুলি রাখতে চাই:

out, err := json.Marshal(&T{Foo: 42})

ফলাফল হবে

{ "Foo": 42}

তবে আমি পেতে চাই

{ "Foo বিন্যাস": 42}

কোনও সহজ উপায়ে সমস্যাটি পাওয়া সম্ভব?


5
@ জিপ্পক্সার: আমি বলব: একটি ক্লায়েন্ট / সার্ভার যোগাযোগ প্রোটোকলের একটি কী কঠোরভাবে ছোট হাতের অক্ষরকে সংজ্ঞায়িত করা হয়। ঠিক আছে, আমার ক্ষেত্রে প্রোটোকলটি নিজেরাই সংজ্ঞায়িত করার পরে কিছু যায় আসে না .. তবে তত্ত্বের ক্ষেত্রে কি অন্তত? তবে, আমি জানি এটি মূলত কেবল একটি নির্বোধ সামান্য বিশদে বেশি সময় ব্যয় করে।
আনিসাস

ক্ষমা চাইবেন না। আপনি নির্বোধ নন, সম্পূর্ণ জেসন স্পেক গ্রহণ না করে এমন ভাষা হ'ল মূর্খতা (যদিও বিষয়টি সহজেই নীচের মত সমাধান হয়েছে)।
জাহান

@ ইউনিসাস: আমি আপনার প্রশ্নটি জেএসওএন কী নাম নয়, স্ট্রাক্ট কী নামগুলি হিসাবে ভুলভাবে লিখছি। ভোট প্রত্যাহার।
ফ্লিমজি

উত্তর:


265

এনকোডিং / json . মার্শালের জন্য ডক্সে একবার দেখুন । উত্পন্ন জাসনকে কীভাবে ফর্ম্যাট করা যায় তা নির্ধারণ করতে এটি স্ট্রাক্ট ফিল্ড ট্যাগ ব্যবহার করে আলোচনা করে।

উদাহরণ স্বরূপ:

type T struct {
    FieldA int    `json:"field_a"`
    FieldB string `json:"field_b,omitempty"`
}

এটি নীচে JSON উত্পন্ন করবে:

{
    "field_a": 1234,
    "field_b": "foobar"
}

8
মাঠের ট্যাগ? ওহ আমার .. ডক্সে অনুসন্ধান করার সময় আমি এই পুরো অংশটি মিস করেছি। আমি পতাকা, ফাংশন বা অন্য কোনও সেটিংস খুঁজছিলাম। ঠিক আছে, আমি এটিই সঠিক উত্তরটি খুঁজছিলাম! এবং
তদ্ব্যতীত

তারা বেশ কার্যকর। আপনি reflectপ্যাকেজের মাধ্যমে রানটাইমে এগুলি অ্যাক্সেস করতে পারেন ।
জিমট

হ্যাঁ, প্রতিবিম্বের সাথে কাজ করার সময় আমি দেখতে পাচ্ছি যে কোনও ক্ষেত্রে মেটা ডেটা যুক্ত করার উপায় কীভাবে দুর্দান্ত জিনিস হতে পারে! বিটিডব্লিউ, শুধু উত্তর চেষ্টা করে দেখুন। একটি যাদুমন্ত্র মত কাজ করে.
আনিসাস

5
আমি সবেমাত্র গো ভাষাকে অভিশাপ দিতে শুরু করেছি - এটি কত নির্বোধ, তারা জেনারেটেড জেএসওএন ইত্যাদিতে ছোট হাতের অক্ষর দিয়ে ক্ষেত্রগুলি তৈরি করবে কেন ইত্যাদি Then আমি এমনকি লাফিয়ে আমার বান্ধবীকে ব্যাখ্যা করলাম কেন আমি এত উত্তেজিত: ডি এটি এত দুর্দান্ত :)))
nyxz

11
কোলন এবং ট্যাগের প্রথম উদ্ধৃতি চিহ্নের মধ্যে কোনও স্থান নেই তা নিশ্চিত করুন! json:"some_tag"পরিবর্তে ব্যবহার করুন json: "some_tag"। আমি কিছুক্ষণের জন্য এই দ্বারা বিট পেয়েছিলাম।
ডেভিড মোরালেস

8

আপনি যে কীগুলি রফতানি করতে চান তা দিয়ে আপনি নিজের স্ট্রাক্ট তৈরি করতে পারেন এবং তাদের ছোট হাতের জন্য উপযুক্ত জসন ট্যাগ দিতে পারেন। তারপরে আপনি পছন্দসই কাঠামোটিকে JSON হিসাবে এনকোড করার আগে নিজের মধ্যে অনুলিপি করতে পারেন। অথবা আপনি যদি স্থানীয় কাঠামো তৈরি করে বিরক্ত না করতে চান তবে আপনি সম্ভবত এটি তৈরি করতে পারেন map[string]interface{}এবং এটিকে এনকোড করতে পারেন।


নির্বোধ জিনিসটি হ'ল অন্যান্য প্যাকেজ (প্রকারগুলি সহ) আসলে আমারও। তবে, হ্যাঁ, আমি সম্ভবত অন্ধভাবে তাকিয়ে দেখলাম যে এটি অবশ্যই কাঠামো হওয়া উচিত। map[string]interface{}যতক্ষণ না আমি নেস্টেড অবজেক্টস / স্ট্রাক্ট দিয়ে শেষ না করি একটি ব্যবহার করে কাজ করবে
আনিসাস

1
@ ইউনিসাস: ওঁ, আমার উত্তরটি আপনার পূর্বে কাঠামোর সংজ্ঞা নিয়ন্ত্রণে না রাখার বিষয়ে পূর্বাভাস দেওয়া হয়েছিল। জিম্টের উত্তর অবশ্যই আপনি চান তা।
লিলি বালার্ড ২

হ্যাঁ, আমি বাহ্যিক প্যাকেজটি ছিল কি না তা পরিষ্কার ছিলাম না। আপনি যখন সংজ্ঞাগুলি নিয়ন্ত্রণ করেন না তবে ক্ষেত্রে আপনার উত্তরটি এখনও প্রাসঙ্গিক এবং কার্যকর।
আনিসাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.