在Yandex.Metrica中凹蜈,JSON由用戶作為會(huì)話參數(shù)傳輸隶垮。這個(gè)JSON有一些特殊的功能泼橘。 (盡管在大多數(shù)情況下,JSON還需要進(jìn)行預(yù)處理厦酬,結(jié)果值將以處理后的格式放在不同的列中)胆描。所有這些函數(shù)都基于對(duì)JSON的一些假設(shè),它們盡可能少地完成工作仗阅。
有如下假設(shè):
—字段名稱(函數(shù)參數(shù))必須是一個(gè)常量昌讲。
—字段名稱以某種方式在JSON中正則編碼。例如:visitParamHas('{“abc”:“def”}'霹菊,'abc')= 1剧蚣,visitParamHas('{“\\ u0061 \\ u0062 \\ u0063”:“def”}'支竹,'abc' )= 0
—字段在任何嵌套級(jí)別上進(jìn)行搜索。如果有多個(gè)匹配的字段鸠按,則使用第一個(gè)匹配的字段礼搁。
—JSON沒有字符串外的空格字符。
visitParamHas(params, name)
檢查是否存在具有“name”名稱的字段目尖。
visitParamExtractUInt(params, name)
從名為“name”的字段值解析UInt64馒吴。如果這是一個(gè)字符串字段,它會(huì)嘗試從字符串的開頭解析一個(gè)數(shù)字瑟曲。如果該字段不存在饮戳,或者存在但不包含數(shù)字,則返回0洞拨。
visitParamExtractInt(params, name)
與Int64相同.
visitParamExtractFloat(params, name)
與Float64相同.
visitParamExtractBool(params, name)
解析一個(gè) true/false 值. 結(jié)果是 UInt8.
visitParamExtractRaw(params, name)
返回一個(gè)域的值, 包括分隔符.
示例:
visitParamExtractRaw('{"abc":"\\n\\u0000"}', 'abc') = '"\\n\\u0000"'
visitParamExtractRaw('{"abc":{"def":[1,2,3]}}', 'abc') = '{"def":[1,2,3]}'
visitParamExtractString(params, name)
用雙引號(hào)解析字符串扯罐。值是未轉(zhuǎn)義的。如果轉(zhuǎn)碼失敗烦衣,它將返回一個(gè)空字符串歹河。
示例:
visitParamExtractString('{"abc":"\\n\\u0000"}', 'abc') = '\n\0'visitParamExtractString('{"abc":"\\u263a"}', 'abc') = '?'visitParamExtractString('{"abc":"\\u263"}', 'abc') = ''visitParamExtractString('{"abc":"hello}', 'abc') = ''