在超级账本结构中调用时,如何将json对象作为args中的参数之一传递给chaincode。 我已经尝试过了,结果是stub.getArgs()方法是[Object,Object]
答案 0 :(得分:1)
从NodeSDK调用chaincode方法时,使用以下命令将json对象作为json字符串传递 JSON.stringify方法。
当您在链码中收到一个json字符串作为参数时,请在golang对象中对其进行反序列化(以下为示例代码)
function, args := helper.Stub.GetFunctionAndParameters()
var jsonObj interface{}
err := json.Unmarshal([]byte(args[0]), &jsonObj)
if err != nil {
fmt.Println("Can't deserialize", []byte(args[0]))
}
注意:上面的代码将反序列化匿名json字符串。如果您已经知道json结构,请先使用golang struct创建相同的json结构,然后将json字符串反序列化为该结构的对象。
答案 1 :(得分:0)
应作为字符串传递(例如,包含json数据的字符串)。从那里,您可以使用JSON.parse(string)
转换为json。
答案 2 :(得分:0)
如果您使用任何第三方Rest API调用/查询分类帐,则可以将对象转换为base64编码的字符串并以链码对其进行解码。
答案 3 :(得分:0)
1)检查发送的JSON是否有效。
2)您必须将json对象转换为转义 json对象以作为参数传递。
此online tool将有助于将json对象转换为转义/未转义的json。
未转义的JSON:
create table restriction_codes (ingredient_number, restriction_code) as
select '001', 'NN' from dual union all
select '001', 'R-03' from dual union all
select '001', 'R-02' from dual union all
select '002', 'R-22' from dual union all
select '002', 'NN' from dual union all
select '003', 'R-03' from dual union all
select '004', 'CCC' from dual union all
select '004', 'DDD' from dual
;
create table locations (restriction_code, location) as
select 'NN' , 'CLE' from dual union all
select 'NN' , 'LAX' from dual union all
select 'NN' , 'ORD' from dual union all
select 'NN' , 'JFK' from dual union all
select 'NN' , 'PIT' from dual union all
select 'NN' , 'DFW' from dual union all
select 'R-03', 'CLE' from dual union all
select 'R-03', 'LAX' from dual union all
select 'R-02', 'LAX' from dual union all
select 'R-02', 'DFW' from dual union all
select 'R-22', 'JFK' from dual union all
select 'R-03', 'PIT' from dual union all
select 'CCC' , 'ORD' from dual union all
select 'DDD' , 'LGA' from dual
;
转义的JSON:
with
prep (ingredient_number, restriction_code, restriction_count) as (
select ingredient_number, restriction_code,
count(*) over (partition by ingredient_number)
from restriction_codes
)
select p.ingredient_number, l.location
from prep p inner join locations l on p.restriction_code = l.restriction_code
group by p.ingredient_number, p.restriction_count, l.location
having count(*) = p.restriction_count
order by p.ingredient_number, l.location
;
INGREDIENT_NUMBER LOCATION
------------------ --------
001 LAX
002 JFK
003 CLE
003 LAX
003 PIT
与JSON.stringify(object)相同