遇到错误“错误:链码参数错误:对象键后的字符']'无效”

问题描述 投票:0回答:2

我正在尝试修改 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)

}

谁能告诉我我在这里做错了什么?

blockchain hyperledger-fabric smartcontracts chaincode
2个回答
0
投票

我意识到我做错了什么。这是一个愚蠢的错误。 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\"}}"]}


-1
投票

你确定它有效吗?因为我在行尾看到了额外的 ]

© www.soinside.com 2019 - 2024. All rights reserved.