গো স্ট্রাক্টকে জেএসএন-তে রূপান্তর করা হচ্ছে


180

আমি jsonপ্যাকেজটি ব্যবহার করে একটি জি স্ট্রোককে জেএসএন-তে রূপান্তর করার চেষ্টা করছি তবে যা পাই তা হ'ল {}। আমি নিশ্চিত এটি সম্পূর্ণরূপে সুস্পষ্ট কিছু তবে আমি এটি দেখতে পাচ্ছি না।

package main

import (
    "fmt"
    "encoding/json"
)

type User struct {
    name string
}

func main() {
    user := &User{name:"Frank"}
    b, err := json.Marshal(user)
    if err != nil {
        fmt.Printf("Error: %s", err)
        return;
    }
    fmt.Println(string(b))
}

তারপরে যখন আমি এটি চালানোর চেষ্টা করি তখন আমি এটি পাই:

$ 6g test.go && 6l -o test test.6 && ./test 
{}

উত্তর:


327

আপনাকে ক্ষেত্রটি রফতানি করতে হবে User.nameযাতে jsonপ্যাকেজটি এটি দেখতে পারে। nameক্ষেত্রটির নাম পরিবর্তন করুন Name

package main

import (
    "fmt"
    "encoding/json"
)

type User struct {
    Name string
}

func main() {
    user := &User{Name: "Frank"}
    b, err := json.Marshal(user)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}

আউটপুট:

{"Name":"Frank"}

87
নোট করুন যে আপনি `json:"name"`আউটপুট নাম সংরক্ষণ করতে স্ট্রাক্ট ফিল্ড সংজ্ঞাটির শেষে যুক্ত করতে পারেন ।
ডাস্টিন

12
আমি দেখি. আমি ভাষাটি পছন্দ করি তবে আমার মনে হয় কিছু সিন্ট্যাক্টিকাল উপাদানগুলি অনেকদূর যায়। যদি কোনও স্ট্রাক্ট সদস্যের নাম আচরণটি নির্ধারণ করে তবে এটি ঠিক ভুল।
ম্যাজিকনায়ার

1
ঠিক আছে, নামটি নির্ধারণ করে আচরণটি বিতর্ক করা যেতে পারে যদি তা ভাল বা খারাপ হয় তবে :) তবে এটি নিশ্চিত করে কোনও ক্ষেত্রটি রপ্তানি করা হয়েছে কি না তা অন্য কোথাও যাচাই না করে নিশ্চিত করা সহজ করে তোলে।
অলিফ

6
@magiconair: প্রথম জাদুঅক্ষর ক্যাপিটালাইজেশন দৃশ্যমানতা নির্ধারণ করে চেয়ে, অনেক অধিক যুক্তিসঙ্গত ধারণা "একটি struct সদস্য নাম আচরণ নির্ধারণ করে" । দৃশ্যমানতা মেটাডেটা কোথাও সংরক্ষণ করা দরকার এবং এটি প্রকাশের জন্য বাক্য গঠন প্রয়োজন। শেষ পর্যন্ত এটি নির্ধারিত হয়েছিল যে প্রথম চরটির মূলধনকে বেছে নেওয়া সবচেয়ে কম ট্রেড অফের সাথে সবচেয়ে ভাল কাজ করে। Go1 প্রকাশের আগে অন্যান্য স্কিমগুলি চেষ্টা ও বাতিল করা হয়েছিল।
deft_code

11
আমি এখন থেকে মূলধন দ্বারা রফতানি সহ ভাষাটি অনেক দীর্ঘ পথ থেকে চলে এসেছি।
ম্যাজিকনায়ার

62

সম্পর্কিত সমস্যা:

স্ট্রাক্টটিকে জেএসএনে রূপান্তর করতে, গোলং থেকে প্রতিক্রিয়া হিসাবে প্রেরণে আমার সমস্যা হয়েছিল, পরে অ্যাজাক্সের মাধ্যমে জাভাস্ক্রিপ্টে একই ধরুন।

অনেক সময় নষ্ট, তাই সমাধান পোস্ট এখানে।

যান:

// web server

type Foo struct {
    Number int    `json:"number"`
    Title  string `json:"title"`
}

foo_marshalled, err := json.Marshal(Foo{Number: 1, Title: "test"})
fmt.Fprint(w, string(foo_marshalled)) // write response to ResponseWriter (w)

জাভাস্ক্রিপ্টে:

// web call & receive in "data", thru Ajax/ other

var Foo = JSON.parse(data);
console.log("number: " + Foo.number);
console.log("title: " + Foo.title);

আশা করি এটি কাউকে সাহায্য করবে।
ভাগ্য সুপ্রসন্ন হোক.


6

JSON অবজেক্ট হিসাবে মানগুলি এনকোড করুন ruct প্রতিটি রফতানি স্ট্রাক্ট ক্ষেত্র অবজেক্টের সদস্য হয়ে যায় যদি না:

  • ক্ষেত্রের ট্যাগটি "-", বা
  • ক্ষেত্রটি খালি এবং এর ট্যাগটি "সর্বশেষতা" বিকল্পটি নির্দিষ্ট করে।

খালি মানগুলি 0, কোনও শূন্য পয়েন্টার বা ইন্টারফেস মান এবং কোনও অ্যারে, স্লাইস, মানচিত্র, বা দৈর্ঘ্যের শূন্যের মান মিথ্যা। অবজেক্টের ডিফল্ট কী স্ট্রিংটি স্ট্রাক্ট ফিল্ডের নাম তবে স্ট্রাক্ট ফিল্ডের ট্যাগ মানতে নির্দিষ্ট করা যেতে পারে। স্ট্রাক্ট ফিল্ডের ট্যাগ মানটির মধ্যে "জসন" কীটি মূল নাম এবং তার পরে একটি maচ্ছিক কমা এবং বিকল্প রয়েছে।


2

আপনি আপনার নিজস্ব কাস্টম মার্শালজসন এবং আনমারশাল জসন পদ্ধতিগুলি সংজ্ঞায়িত করতে পারেন এবং ইচ্ছাকৃতভাবে কী অন্তর্ভুক্ত করা উচিত তা নিয়ন্ত্রণ করতে পারেন, প্রাক্তন:

package main

import (
    "fmt"
    "encoding/json"
)

type User struct {
    name string
}

func (u *User) MarshalJSON() ([]byte, error) {
    return json.Marshal(&struct {
        Name     string `json:"name"`
    }{
        Name:     "customized" + u.name,
    })
}

func main() {
    user := &User{name: "Frank"}
    b, err := json.Marshal(user)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.