परिचय यह एक सरल डेटा एक्सचेंज प्रारूप है. लगभग 15 साल पहले, हमने , जो JSON डेटा के लिए और से Go प्रकारों को serialize और deserialize करने की क्षमता का परिचय दिया है. तब से, JSON इंटरनेट पर इस्तेमाल किया जाने वाला सबसे लोकप्रिय डेटा प्रारूप बन गया है. यह व्यापक रूप से पढ़ा जाता है और Go कार्यक्रमों द्वारा लिखा जाता है, और कोडिंग /json अब 5 सबसे अधिक आयातित Go पैकेज के रूप में रैंक करता है. जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) Go में JSON का समर्थन समय के साथ, पैकेज अपने उपयोगकर्ताओं की जरूरतों के साथ विकसित होते हैं, और यह ब्लॉग पोस्ट Go 1.25 के नए प्रयोगशाला के बारे में है और पैकेज, जो लंबे समय से प्रतीक्षित सुधार और सुधार लाते हैं. इस पोस्ट में एक नई प्रमुख एपीआई संस्करण के लिए तर्क दिया गया है, नए पैकेज की एक समीक्षा प्रदान करता है, और समझाता है कि आप इसका उपयोग कैसे कर सकते हैं. प्रयोगशाला पैकेज डिफ़ॉल्ट रूप से दिखाई नहीं देते हैं और भविष्य में एपीआई परिवर्तनों का सामना कर सकते हैं. encoding/json encoding/json/v2 encoding/json/jsontext समस्याओं के साथ encoding/json कोडिंग / जेसन कुल मिलाकर, JSON में कुछ डिफ़ॉल्ट प्रतिनिधित्व के साथ मार्शलिंग और अन मार्शलिंग arbitrary Go प्रकार का विचार, प्रतिनिधित्व को अनुकूलित करने की क्षमता के साथ संयोजन में, अत्यधिक लचीला साबित हो गया है। encoding/json व्यवहार की गलतियाँ व्यवहार में कई गलतियां होती हैं। : encoding/json : Over the years, JSON has seen increased standardization in order for programs to properly communicate. Generally, decoders have become stricter at rejecting ambiguous inputs, to reduce the chance that two implementations will have different (successful) interpretations of a particular JSON value. Imprecise handling of JSON syntax currently accepts invalid UTF-8, whereas the latest Internet Standard (RFC 8259) requires valid UTF-8. The default behavior should report an error in the presence of invalid UTF-8, instead of introducing silent data corruption, which may cause problems downstream. encoding/json currently accepts objects with duplicate member names. RFC 8259 does not specify how to handle duplicate names, so an implementation is free to choose an arbitrary value, merge the values, discard the values, or report an error. The presence of a duplicate name results in a JSON value without a universally agreed upon meaning. This could be and has been exploited before (as in ). The default behavior should err on the side of safety and reject duplicate names. encoding/json exploited by attackers in security applications CVE-2017-12635 टुकड़ों और नक्शाओं की निकटता: JSON को अक्सर JSON कार्यान्वयनों का उपयोग करके प्रोग्रामों के साथ संचार करने के लिए उपयोग किया जाता है जो null को किसी डेटा प्रकार में unmarshed करने की अनुमति नहीं देता है जिसे एक JSON आरे या ऑब्जेक्ट होने की उम्मीद है. चूंकि कोडिंग/json एक nil आरे या नक्शा को एक JSON null के रूप में marshal करता है, यह अन्य कार्यान्वयनों द्वारा unmarshaling करते समय त्रुटियों का कारण बन सकता है. एक सर्वेक्षण से पता चला है कि अधिकांश Go उपयोगकर्ता चुनिंदा रूप से एक खाली JSON आरे या ऑब्जेक्ट के रूप में nil slices और नक्शाओं को marshaled करना पसंद करते हैं. Case-insensitive unmarshaling: when unmarshaling, a JSON object member name is resolved to a Go struct field name using a case-insensitive match. यह एक आश्चर्यजनक डिफ़ॉल्ट, एक संभावित सुरक्षा कमजोरी, और एक प्रदर्शन सीमा है। विधियों का असंगठित कॉल: एक कार्यान्वयन विवरण के कारण, मार्शलजेसन विधियों को एक पेंटर रिसीवर पर घोषित किया जाता है, कोडिंग / जेसन द्वारा असंगठित रूप से कॉल किया जाता है. हालांकि एक बग के रूप में माना जाता है, यह ठीक नहीं किया जा सकता है क्योंकि बहुत सारे अनुप्रयोग वर्तमान व्यवहार पर निर्भर हैं. आग की कमी आग के यह कठिन या प्रतिबंधित हो सकता है: encoding/json उपयोगकर्ता अक्सर json.NewDecoder(r).Decode(v) लिखते हैं, जो इनपुट के अंत में ट्रेलिंग स्नैक को अस्वीकार नहीं करता है। विकल्प को Encoder और Decoder प्रकार पर सेट किया जा सकता है, लेकिन Marshal और Unmarshal कार्यों के साथ इसका उपयोग नहीं किया जा सकता है। इसी तरह, Marshaler और Unmarshaler इंटरफ़ेस को लागू करने वाले प्रकार विकल्पों का उपयोग नहीं कर सकते हैं और कॉल स्टैक के नीचे विकल्पों को प्लम करने का कोई तरीका नहीं है. उदाहरण के लिए, Decoder.DisallowUnknownFields विकल्प एक कस्टम UnmarshalJSON विधि को कॉल करते समय अपना प्रभाव खो देता है. Compact, Indent और HTMLEscape फ़ंक्शन एक []byte या io.Writer जैसे अधिक लचीले चीजों के बजाय एक bytes.Buffer में लिखते हैं। प्रदर्शन सीमाएं आंतरिक कार्यान्वयन विवरण को छोड़कर, सार्वजनिक एपीआई इसे कुछ प्रदर्शन सीमाओं के लिए प्रतिबद्ध करता है: : The interface method forces the implementation to allocate the returned . Also, the semantics require that verify that the result is valid JSON and also to reformat it to match the specified indentation. MarshalJSON MarshalJSON []byte encoding/json : The interface method requires that a complete JSON value be provided (without any trailing data). This forces to parse the JSON value to be unmarshaled in its entirety to determine where it ends before it can call . Afterwards, the method itself must parse the provided JSON value again. UnmarshalJSON UnmarshalJSON encoding/json UnmarshalJSON UnmarshalJSON : Even though the and types operate on an or , they buffer the entire JSON value in memory. The method for reading individual tokens is allocation-heavy and there is no corresponding API for writing tokens. Lack of streaming Encoder Decoder io.Writer io.Reader Decoder.Token इसके अलावा, यदि एक या विधि को पुनरावृत्ति कहा जाता है or इस प्रकार, प्रदर्शन क्रैश हो जाता है। MarshalJSON UnmarshalJSON Marshal Unmarshal ठीक करने की कोशिश सीधे encoding/json कोडिंग / जेसन एक पैकेज का एक नया, असंगत प्रमुख संस्करण पेश करना एक भारी विचार है. यदि संभव हो, तो हमें मौजूदा पैकेज को ठीक करने की कोशिश करनी चाहिए. While it is relatively easy to add new features, it is difficult to change existing features. Unfortunately, these problems are inherent consequences of the existing API, making them practically impossible to fix within the . Go 1 संगतता वादा हम सिद्धांत रूप में अलग-अलग नाम घोषित कर सकते हैं, जैसे या , लेकिन यह एक ही पैकेज के भीतर एक समानांतर नामस्पेस बनाने के बराबर है। (henceforth called ) जहां हम इन परिवर्तनों को अलग-अलग में कर सकते हैं अंतरिक्ष के विपरीत (आज से कहा जाता है ) MarshalV2 UnmarshalV2 encoding/json/v2 v2 v2 encoding/json v1 योजना के लिए encoding/json/v2 एन्कोडिंग / JSON / V2 एक नए बड़े संस्करण के लिए योजना 2020 के अंत में, वर्तमान पैकेज में मुद्दों को ठीक करने में असमर्थता के कारण, डैनियल मार्टी (एक के रखरखावकर्ताओं में से एक ) पहले अपने विचारों को लिखते हैं पैकेज की तरह दिखना चाहिए. अलग से, पहले काम के बाद जॉब ने निराश किया एक अनुकूलित JSON कार्यान्वयन का उपयोग करने के लिए आवश्यक पैकेज क्योंकि न ही प्रोटोकॉल बफर विनिर्देश की आवश्यकता के लिए कठोर JSON मानक का पालन करने में सक्षम था, न ही JSON को प्रभावी ढंग से स्ट्रीमिंग तरीके से श्रृंखलाकरण करने में सक्षम था। encoding/json encoding/json क्या है Hypothesis v2 प्रोटोकॉल बफर के लिए Go API के protojson encoding/json जेएसओएन के लिए एक उज्ज्वल भविष्य को लाभदायक और संभव मानते हुए, डेनियल और जो ने दिमाग की तूफान करने के लिए अपनी ताकतों को जोड़ दिया और (जिसके प्रारंभिक कोड के साथ Go protobuf मॉड्यूल से JSON श्रृंखलाकरण तर्क का एक पॉलिश संस्करण है)। समय के साथ, कुछ अन्य (रोजर पेपर, क्रिस हाइन्स, जोहान ब्रैंडहॉर्स्ट-सैटकोर्न, और डेमीन नील) ने डिजाइन समीक्षा, कोड समीक्षा, और पुनरावृत्ति परीक्षण प्रदान करके प्रयास में शामिल किया। और . v2 एक प्रोटोटाइप का निर्माण शुरू रिकॉर्ड बैठकें बैठक नोट्स यह काम शुरू से ही सार्वजनिक रहा है, और हमने अधिक से अधिक व्यापक गॉ समुदाय को शामिल किया है, पहले एक और , और हाल ही में सभी Go उपयोगकर्ताओं द्वारा व्यापक परीक्षण के लिए एक Go प्रयोग (Go 1.25 में उपलब्ध) के रूप में। Gophercon बातचीत discussion posted in late 2023 प्रारंभ 2025 में प्रस्तुत आधिकारिक प्रस्ताव अपनाना encoding/json/v2 के प्रयास 5 वर्षों से चल रहा है, कई योगदानकर्ताओं से प्रतिक्रियाओं को शामिल करते हुए और उत्पादन सेटिंग्स में उपयोग से मूल्यवान अनुभवी अनुभव भी प्राप्त करते हैं। v2 यह ध्यान देने योग्य है कि इसे ज्यादातर लोगों द्वारा विकसित और प्रोत्साहित किया गया है जिन्हें Google द्वारा रोजगार नहीं दिया गया है, जो दिखाता है कि Go परियोजना एक समृद्ध वैश्विक समुदाय के साथ एक सहयोगी प्रयास है जो Go पारिस्थितिकी तंत्र को बेहतर बनाने के लिए समर्पित है। Building on encoding/json/jsontext एन्कोडिंग / JSON / JSON इसके बारे में चर्चा करने से पहले एफआईआर, हम पहले प्रयोगशालाओं को पेश करते हैं पैकेज जो Go में JSON के लिए भविष्य के सुधारों के लिए आधार बनाता है। v2 encoding/json/jsontext JSON serialization in Go can be broken down into two primary components: that is concerned with processing JSON based on its grammar, and syntactic functionality सेमेंटिक कार्यक्षमता जो JSON मानों और Go मानों के बीच संबंध को परिभाषित करती है। We use the terms “encode” and “decode” to describe syntactic functionality and the terms “marshal” and “unmarshal” to describe semantic functionality. We aim to provide a clear distinction between functionality that is purely concerned with encoding versus that of marshaling. यह चार्ट इस विभाजन की एक समीक्षा प्रदान करता है। गुलाबी ब्लॉक प्रकार का प्रतिनिधित्व करते हैं, जबकि नीले ब्लॉक कार्यों या विधियों का प्रतिनिधित्व करते हैं। तीरों की दिशा लगभग डेटा प्रवाह का प्रतिनिधित्व करती है। पैकेज, इसमें कार्यक्षमता शामिल है जो केवल सिंटाक्स से संबंधित है, जबकि ऊपरी आधा, package, contains functionality that assigns semantic meaning to syntactic data handled by the bottom half. jsontext json/v2 बुनियादी API यह निम्न है: jsontext package jsontext type Encoder struct { ... } func NewEncoder(io.Writer, ...Options) *Encoder func (*Encoder) WriteValue(Value) error func (*Encoder) WriteToken(Token) error type Decoder struct { ... } func NewDecoder(io.Reader, ...Options) *Decoder func (*Decoder) ReadValue() (Value, error) func (*Decoder) ReadToken() (Token, error) type Kind byte type Value []byte func (Value) Kind() Kind type Token struct { ... } func (Token) Kind() Kind के पैकेज सिंथेटिक स्तर पर JSON के साथ बातचीत के लिए कार्यक्षमता प्रदान करता है और इसके नाम से उत्पन्न होता है जहां JSON डेटा के लिए ग्रंथशास्त्र को सचमुच कहा जाता है चूंकि यह केवल सिंथेटिक स्तर पर JSON के साथ बातचीत करता है, इसलिए यह Go प्रतिबिंब पर निर्भर नहीं करता है। jsontext RFC 8259, section 2 JSON-text के और JSON मूल्यों और टोकनों को एन्कोडिंग और डिकोडिंग के लिए समर्थन प्रदान करते हैं। that affect the particular behavior of encoding and decoding. Unlike the and लोगों ने घोषित किया नए लोगों में सिंटाक्स और सेमेन्टिक्स के बीच अंतर को भ्रमित करने से बचें और वास्तव में स्ट्रीमिंग तरीके से काम करें। Encoder Decoder Variable विकल्पों को स्वीकार करें Encoder Decoder v1 jsontext एक JSON मूल्य डेटा की एक पूर्ण इकाई है और इसे Go में वर्णित किया जाता है . It is identical to in एक JSON मूल्य एक या अधिक JSON टोकन से सिंथैक्टिक रूप से बना है. A JSON token is represented in Go as the उपकरणों और उपकरणों के साथ, यह एक समान है। में लेकिन डिज़ाइन किया गया है बिना आवंटन के वैध JSON टोकन का प्रतिनिधित्व करने के लिए। एक नाम []byte RawMessage v1 अंधेरे Token Token v1 मूल समस्याओं को हल करने के लिए और interface methods, we need an efficient way of encoding and decoding JSON as a streaming sequence of tokens and values. In हम इसे पेश करते हैं और interface methods that operate on an or , तरीकों के कार्यान्वयनों को शुद्ध रूप से स्ट्रीमिंग तरीके से JSON को संसाधित करने की अनुमति देता है। MarshalJSON UnmarshalJSON v2 MarshalJSONTo UnmarshalJSONFrom Encoder Decoder इस प्रकार, package need not be responsible for validating or formatting a JSON value returned by , और यह निर्धारित करने के लिए एक JSON मूल्य की सीमाओं के लिए जिम्मेदार नहीं होना चाहिए इन जिम्मेदारीओं से संबंधित है और . json MarshalJSON UnmarshalJSON Encoder Decoder Introducing encoding/json/v2 encoding/json/v2 Building on the आज हमने प्रयोगशाला को पेश किया है package. It is designed to fix the aforementioned problems, while remaining familiar to users of the हमारा उद्देश्य यह है कि उपयोगकर्ता will operate the same if directly migrated to . jsontext encoding/json/v2 v1 v1 ज्यादातर v2 इस लेख में हम मुख्य रूप से उच्च-स्तरीय API को कवर करेंगे इसका उपयोग करने के उदाहरणों के लिए, हम पाठकों को अध्ययन करने के लिए प्रोत्साहित करते हैं पैकेज या पढ़ें . v2 the examples in the v2 Anton Zhiyanov का ब्लॉग इस विषय को कवर करता है The basic API of is the following: v2 package json func Marshal(in any, opts ...Options) (out []byte, err error) func MarshalWrite(out io.Writer, in any, opts ...Options) error func MarshalEncode(out *jsontext.Encoder, in any, opts ...Options) error func Unmarshal(in []byte, out any, opts ...Options) error func UnmarshalRead(in io.Reader, out any, opts ...Options) error func UnmarshalDecode(in *jsontext.Decoder, out any, opts ...Options) error The and कार्यों में एक समान हस्ताक्षर है , लेकिन अपने व्यवहार को कॉन्फ़िगर करने के लिए विकल्प स्वीकार करें। और कार्यों को सीधे एक या अस्थायी रूप से निर्माण करने की आवश्यकता से बचने के लिए or just to write or read from such types. Marshal Unmarshal v1 MarshalWrite UnmarshalRead io.Writer io.Reader Encoder Decoder The और functions operate on a और and is actually the underlying implementation of the previously mentioned functions. Unlike , विकल्प मार्शल और गैर मार्शल कार्यों के प्रत्येक के लिए एक प्रथम श्रेणी का तर्क हैं, जो बहुत लचीलापन और कॉन्फ़िगरिबल को बढ़ाता है वहाँ हैं in जो इस लेख में शामिल नहीं हैं। MarshalEncode UnmarshalDecode jsontext.Encoder jsontext.Decoder v1 v2 उपलब्ध कई विकल्प v2 प्रकार-विशिष्ट कस्टमाइज़ेशन इसी तरह , allows types to define their own JSON representation by satisfying particular interfaces. v1 v2 type Marshaler interface { MarshalJSON() ([]byte, error) } type MarshalerTo interface { MarshalJSONTo(*jsontext.Encoder) error } type Unmarshaler interface { UnmarshalJSON([]byte) error } type UnmarshalerFrom interface { UnmarshalJSONFrom(*jsontext.Decoder) error } के and इंटरफ़ेस उन लोगों के साथ समान हैं जो नए और interfaces allow a type to represent itself as JSON using a या यह कॉल स्टैक के नीचे विकल्पों को आगे बढ़ाने की अनुमति देता है, क्योंकि विकल्पों को कॉल स्टैक के माध्यम से प्राप्त किया जा सकता है। accessor method on the या . Marshaler Unmarshaler v1 MarshalerTo UnmarshalerFrom jsontext.Encoder jsontext.Decoder Options Encoder Decoder यह उदाहरण कैसे एक कस्टम प्रकार को लागू करने के लिए जो JSON ऑब्जेक्ट सदस्यों की क्रमबद्धता बनाए रखता है। के OrderedObject Caller-specified customization में , the caller of और can also specify a custom JSON representation for any arbitrary type, where caller-specified functions take precedence over type-defined methods or the default representation for a particular type. v2 Marshal Unmarshal func WithMarshalers(*Marshalers) Options type Marshalers struct { ... } func MarshalFunc[T any](fn func(T) ([]byte, error)) *Marshalers func MarshalToFunc[T any](fn func(*jsontext.Encoder, T) error) *Marshalers func WithUnmarshalers(*Unmarshalers) Options type Unmarshalers struct { ... } func UnmarshalFunc[T any](fn func([]byte, T) error) *Unmarshalers func UnmarshalFromFunc[T any](fn func(*jsontext.Decoder, T) error) *Unmarshalers और construct a custom marshaler that can be passed to a call using to override the marshaling of particular types. Similarly, and समान अनुकूलन के लिए समर्थन . MarshalFunc MarshalToFunc Marshal WithMarshalers UnmarshalFunc UnmarshalFromFunc Unmarshal example demonstrates how this feature allows serialization of all ऐसे लोग हैं जिन्हें संभालने के लिए package. के ProtoJSON proto.Message protojson Behavior differences While व्यवहार करने का लक्ष्य the same as उसका व्यवहार बदल गया है to address problems in सबसे विशेष रूप से: v2 ज्यादातर v1 कुछ तरीकों से v1 reports an error in the presence of invalid UTF-8. v2 reports an error if a JSON object contains a duplicate name. v2 marshals a nil Go slice or Go map as an empty JSON array or JSON object, respectively. v2 unmarshals a JSON object into a Go struct using a case-sensitive match from the JSON member name to the Go field name. v2 redefines the tag option to omit a field if it would have encoded as an “empty” JSON value (which are , , , and ). v2 omitempty null "" [] {} reports an error when trying to serialize a , which currently has , but provides options to let the caller decide. v2 time.Duration no default representation अधिकांश व्यवहार परिवर्तनों के लिए, एक संरचनात्मक टैग विकल्प या कॉलर निर्दिष्ट विकल्प है जो व्यवहार को कार्य करने के लिए कॉन्फ़िगर कर सकता है या समानता, या यहां तक कि अन्य कॉलर निर्धारित व्यवहार। for more information. v1 v2 “V2 में प्रवास” प्रदर्शन अनुकूलन के प्रदर्शन के यह लगभग समान है . Sometimes it is slightly faster, but other times it is slightly slower. The performance of इससे काफी तेजी से , संदर्भों के साथ जो 10x तक सुधार दिखाते हैं। Marshal v2 v1 Unmarshal v2 v1 अधिक लाभ प्राप्त करने के लिए, मौजूदा कार्यान्वयन and should migrate to also implement and , ताकि वे शुद्ध रूप से स्ट्रीमिंग तरीके से JSON को संसाधित करने से लाभ उठा सकें। methods significantly hurt performance in a particular service of Kubernetes (see ), while switching to आकार के आदेशों से प्रदर्शन में सुधार। Marshaler Unmarshaler MarshalerTo UnmarshalerFrom UnmarshalJSON क्यूबेरेंटी / क्यूबेरेंटी # 315 UnmarshalJSONFrom अधिक जानकारी के लिए, देखें repository. go-json-experiment/jsonbench retroactive सुधार कोडिंग / जेसन कोडिंग / जेसन We want to avoid two separate JSON implementations in the Go standard library, so it is critical that, under the hood, is implemented in terms of . v1 v2 इस दृष्टिकोण के कई लाभ हैं: : The and functions in or represent a set of default behaviors that operate according to or semantics. Options can be specified that configure or to operate with entirely , mostly with a some , a mix of or , mostly with some , or entirely semantics. This allows for gradual migration between the default behaviors of the two versions. Gradual migration Marshal Unmarshal v1 v2 v1 v2 Marshal Unmarshal v1 v1 v2 v1 v2 v2 v1 v2 : As backward-compatible features are added to , they will inherently be made available in . For example, adds support for several new struct tag options such as or and also support for the and interface methods, which are both more performant and flexible. When is implemented in terms of , it will inherit support for these features. Feature inheritance v2 v1 v2 inline format MarshalJSONTo UnmarshalJSONFrom v1 v2 : Maintenance of a widely used package demands significant effort. By having and use the same implementation, the maintenance burden is reduced. In general, a single change will fix bugs, improve performance, or add functionality to both versions. There is no need to backport a change with an equivalent change. Reduced maintenance v1 v2 v2 v1 While select parts of समय के साथ संभव हो सकता है (समय पर) एक प्रयोग होने से स्नातक), पूरे पैकेज को कभी भी अप्रत्याशित नहीं किया जाएगा। will be encouraged, but not required. The Go project will not drop support for . v1 v2 v2 v1 Experimenting with jsonv2 जीएसटी2 नई आग में और पैकेज डिफ़ॉल्ट रूप से दिखाई नहीं देते हैं. उन्हें उपयोग करने के लिए, अपने कोड का निर्माण करें set in your environment or with the एक प्रयोग की प्रकृति यह है कि एपीआई अस्थिर है और भविष्य में बदल सकता है. हालांकि एपीआई अस्थिर है, कार्यान्वयन उच्च गुणवत्ता वाला है और कई प्रमुख परियोजनाओं द्वारा उत्पादन में सफलतापूर्वक उपयोग किया गया है. encoding/json/jsontext encoding/json/v2 GOEXPERIMENT=jsonv2 goexperiment.jsonv2 The fact that is implemented in terms of means that the underlying implementation of यह बिल्कुल अलग है, जब आप इसके तहत किसी भी कोड को बदलने के बिना, आपको अपने परीक्षणों को चलाने में सक्षम होना चाहिए और सैद्धांतिक रूप से कुछ भी नया असफल नहीं होना चाहिए: v1 v2 v1 jsonv2 jsonv2 GOEXPERIMENT=jsonv2 go test ./... पुनरावृत्ति के लिए संदर्भ में aims to provide identical behavior within the bounds of the , though some differences might be observable such as the exact wording of error messages. We encourage you to run your tests under and report any regressions . v1 v2 Go 1 संगतता वादा jsonv2 ट्रैकर के बारे में Go 1.25 में एक प्रयोग बनना आधिकारिक रूप से अपनाने के रास्ते पर एक महत्वपूर्ण मील है और into the standard library. However, the purpose of the आपका प्रतिक्रिया हमारे अगले चरणों को निर्धारित करेगी, और इस प्रयोग के परिणाम, जो प्रयास को छोड़ने से कुछ भी हो सकता है, के रूप में स्थिर पैकेज के लिए Go 1.26. कृपया अपने अनुभव को साझा करें , और Go के भविष्य को निर्धारित करने में मदद करें। encoding/json/jsontext encoding/json/v2 jsonv2 go.dev/विश्वास/71497 Joe Tsai, Daniel Martí, Johan Brandhorst-Satzkorn, Roger Peppe, Chris Hines और Damien Neil This article is available on under a CC BY 4.0 DEED license. The Go Blog जाओ ब्लॉग जाओ ब्लॉग फोटो: JR Korpa on Unsplash जीएसटी कोर अंधेरे