2014-06-24 5 views
0

코드가 있습니다. http://play.golang.org/p/HDlJJ54YqWGolang Json 예상 값을 반환하지 않음

사람의 전화 번호 및 이메일을 인쇄하고 싶습니다. 여러 항목이있을 수 있습니다. 그러나 오류가 정의되지 않습니다. 누구든지 도와 드릴 수 있습니까?

감사합니다.

+0

: 당신은 하나 개의 콘텐츠에 여러 세부 사항을 원한다면, 그것은 ([ ])

당신이 뭔가를 할 수있는 배열에 포함 할 필요가 [전화 : "1111"] 이메일 뭘 하려니? 유효한 구문이 아닙니다. –

+0

아래 답장에서 답을 얻었습니다. 그게 내가 의도 한 것. 고마워. – Pals

답변

0

작은 세부 정보 : 두 번 참조하고 있습니다. 개체의 주소 주소를 json.Unmarshal에 지정합니다. 그냥 주소를 알려줘.

`은 여러 줄을 입력 할 수 있으므로 json 입력을 분할하지 않아도됩니다.

나는 u.Details[Phone:"1111"].Email으로 어디에서 성취하려고하는지 알지 못하지만,이 문법은 없습니다. Details 회원은 Detail의 조각입니다. 슬라이스는 배열과 비슷하며 인덱스로 액세스 할 수 있습니다.

또한 json이 개체 구조와 일치하지 않습니다. 당신은`u.Details을 썼을 때 (http://play.golang.org/p/OP1zbPW_wk)

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type Content struct { 
    Owner string 
    Details []*Detail 
} 

type Detail struct { 
    Phone string 
    Email string 
} 

func (c *Content) SearchPhone(phone string) *Detail { 
    for _, elem := range c.Details { 
     if elem.Phone == phone { 
      return elem 
     } 
    } 
    return nil 
} 

func (c *Content) SearchEmail(email string) *Detail { 
    for _, elem := range c.Details { 
     if elem.Email == email { 
      return elem 
     } 
    } 
    return nil 
} 

func main() { 
    encoded := `{ 
      "Owner": "abc", 
      "Details": [ 
      { 
       "Phone": "1111", 
       "Email": "@gmail" 
      }, 
      { 
       "Phone": "2222", 
       "Email": "@yahoo" 
      } 
      ] 
     }` 

    // Decode the json object 
    u := &Content{} 
    if err := json.Unmarshal([]byte(encoded), u); err != nil { 
     panic(err) 
    } 

    // Print out Email and Phone 
    fmt.Printf("Email: %s\n", u.SearchPhone("1111").Email) 
    fmt.Printf("Phone: %s\n", u.SearchEmail("@yahoo").Phone) 
} 
관련 문제