2017-01-24 2 views
0

Ниже приведен фрагмент кода цепи, в котором я создал структуру клиента, которая сохраняет основную информацию. Я хочу написать функцию обновления, которая сначала извлекает детали клиента с UID (args [0]), а затем добавляет/обновляет страну в соответствии со вторым утверждением обновления функции и, наконец, сохраняет обновленные данные. Что я делаю неправильно? Также я хотел бы знать концепцию Маршала и Унмаршала.Как обновить данные структуры и сохранить ее в цепочном коде?

type Customer struct { 
    UID  string 
    Name string 
    Address struct { 
    StreetNo string 
    Country string 
    } 
} 
func (t *SimpleChaincode) update(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { 


if len(args) != 2 { 
    return nil, errors.New("Incorrect number of arguments. Expecting name of the key to query") 
} 
    //args[0] to get the UID of customer whose details to be updated 
    //args[1] data that needs to be updated 

data,err:= stub.GetState(ars[0]) 
if err != nil { 
    return nil, err 
} 
json.Unmarshal(data, &uid) 
//append 
data.Country= append(data.Country,args[1]) 
fmt.Printf("Risk Fag set for UID %s",data) 

raw, err := json.Marshal(data) 
    if err != nil { 
    return nil, err 
    } 

    stub.PutState(data.UID, raw) 

return nil,nil 

} 

ответ

0

Вы должны предоставить переменную, где пакет JSON может поставить декодированного data.For пример это будет держать карту строк в произвольных типов данных:

map[string]interface{} 

byt := []byte(`{"num":6.13,"strs":["a","b"]}`) 
if err := json.Unmarshal(byt, &dat); err != nil { 
    panic(err) 
} 
fmt.Println(dat) 

результат:

map[num:6.13 strs:[a b]] 
0

Существует хороший пример маршалинга и раскручивания структур в/из JSON в примерах цепного кода Fabric. Он демонстрирует, как читать данные JSON из цепочки, обновлять определенные поля структуры и затем повторно сохранять данные JSON в цепочку. См. Функцию transferMarble в следующем примере:

https://github.com/hyperledger/fabric/blob/release/examples/chaincode/go/marbles02/marbles_chaincode.go

Смежные вопросы