我正在尝试修改 fabcar 来测试它可能的各种数据结构。我使用了以下命令:
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n ${CC_NAME} --peerAddresses localhost:7051 --tlsRootCertFiles $PEER0_ORG1_CA -c '{"function": "createCar", "Args":"CAR101","[{Make: \"Honda\" , Model: \"City\" , Colour: \"White\"} , {Make: \"Swift\" , Model: \"Dezire\" , Colour: \"Black\"}] , {Name: \"James\" , Age: \"29\" , Gender: \"Male\"}"]}'
但是我遇到了上述错误。我的智能合约结构定义为:
type CarDeal struct {
CarDet []Car `json:"cardet"`
OwnerDet Owner `json:"ownerdet"`
}
type Car struct {
Make string `json:"make"`
Model string `json:"model"`
Colour string `json:"colour"`
}
type Owner struct {
Name string `json:"name"`
Age string `json:"age"`
Gender string `json:"gender"`
}
链码函数‘createCar’如下:
func (s *SmartContract) CreateCar(ctx contractapi.TransactionContextInterface, carNumber string, cardet CarDeal) error {
car := cardet
carAsBytes, _ := json.Marshal(car)
return ctx.GetStub().PutState(carNumber, carAsBytes)
}
谁能告诉我我在这里做错了什么?
我意识到我做错了什么。这是一个愚蠢的错误。 JSON 输入字符串应采用键值格式。正确的输入命令是:
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n ${CC_NAME} --peerAddresses localhost:7051 --tlsRootCertFiles $PEER0_ORG1_CA -c '{"function": "createCar", "Args":"CAR101","{\"CarDet\":[{\"Make\": \"Honda\" , \"Model\": \"City\" , \"Colour\": \"White\"} , {\"Make\": \"Swift\" , \"Model\": \"Dezire\" , \"Colour\": \"Black\"}] , \"OwnerDet\": {\"Name\": \"James\" , \"Age\": \"29\" , \"Gender\": \"Male\"}}"]}
你确定它有效吗?因为我在行尾看到了额外的 ]