结甲可能是什么意思| cpi下降意味着什么| 大人是什么意思| 洁尔阴洗液有什么作用| 养胃喝什么茶好| 曹操是什么样的人| 出水痘不能吃什么食物| 带状疱疹一般长在什么地方| 初心不改是什么意思| 12月6号是什么星座| 海关锁是什么意思| 什么叫窦性心律不齐| 子宫萎缩是什么原因| 鼻子下面长痘痘是什么原因引起的| 怀孕后的分泌物是什么样的| 南京五行属什么| 鱼非念什么| 煮玉米加盐有什么好处| 天蝎男喜欢什么样的女生| 骨质欠规整是什么意思| 宁字五行属什么的| 子宫低回声结节是什么意思| 庚申五行属什么| 便秘吃什么菜| 赭色是什么颜色| 女人吃什么能增加雌激素| 人为什么会变| 和谐的意思是什么| 杏仁和什么不能一起吃| 脸上反复长痘是什么原因| 能力很强的动物是什么| 查甲状腺功能挂什么科| 肾萎缩是什么原因引起的| 痛经吃什么药最有效| 打喷嚏很臭是什么原因| 促排药什么时候开始吃| 空调病是什么| 大拇指发麻是什么原因| 小儿鼻炎用什么药好| 山竹有什么功效和作用| 吃什么补充酪氨酸酶| 有点咳嗽吃什么药| 蛟龙是什么意思| 氢键是什么| 棕色眼睛的人什么血统| 血压高有什么症状| 孕妇能吃什么水果最好| trp是什么氨基酸| mr是什么检查| 乳果糖是什么| 淋巴结是什么原因引起的| 手肿是什么原因引起的| 10月19日什么星座| 什么海没有鱼| 8月15日是什么星座| 一个益一个蜀念什么| 糖稀是什么| 荷花是什么生肖| 什么是庚日| 懵懂少年是什么意思| 弱视是什么| 土克什么| 饺子包什么馅好吃| 血糖吃什么水果| tki是什么意思| 肛塞有什么用| 眼睛做激光手术有什么后遗症| 鸡子是什么东西| 肺看什么科室| 甜瓜不能和什么一起吃| 荨麻疹挂什么科| 至死不渝什么意思| 冬瓜吃了有什么好处| 结膜炎是什么原因引起的| 智商税什么意思| 宜五行属什么| 一什么风筝| 明了是什么意思| 佛手瓜什么时候结果| sin是什么边比什么边| 过分是什么意思| 怀孕什么时候吃鹅蛋最好| 喜筵和喜宴是什么意思| 舌尖发麻是什么原因| 多囊吃什么药| 等字五行属什么| 什么花不能浇硫酸亚铁| 才高八斗是指什么生肖| 吃什么对脑血管好| kappa是什么牌子| 择期手术是什么意思| 眼睛出现重影是什么原因| 毛泽东女儿为什么姓李| 手指有痣代表什么意思| 清明有什么习俗| 红花是什么| kumpoo是什么牌子| 荷尔蒙是什么东西起什么作用| 结婚36年是什么婚| 1月21日什么星座| 小说be是什么意思| 大姨妈来了吃什么| 美人尖是什么| 江米是什么米| 低血糖吃什么水果| 心电图是什么| 额头上长痘痘是什么原因引起的| 封神是什么意思| 发烧酒精擦什么部位| 例假提前来是什么原因| 长针眼是什么原因| 冰鱼是什么鱼| 肝不好有什么症状| 自古红颜多薄命是什么意思| 太阳穴痛是什么原因| 什么东西最贵| 淋巴细胞偏高说明什么问题| 梦见雪地是什么征兆| 大腿前侧是什么经络| 屁眼疼是什么原因| 宝宝低烧是什么原因引起的| 什么的水| 樱花什么时候开花| 牛油果和什么榨汁好喝| 睡觉喜欢流口水是什么原因| 头晕吃什么可以缓解| 红男绿女是什么生肖| 腺癌是什么原因引起的| 山竹什么样的好| 打坐有什么好处| 天台种什么植物好| 肠胃性感冒吃什么药| 超纤皮是什么| 牛剖层皮革是什么意思| 吃什么药可以流产不用去医院| 倒立对身体有什么好处| 鬼畜是什么意思| 喝酒对身体有什么危害| 小狗感冒症状是什么样的| 今天是什么纪念日| 条形码的数字代表什么| 搭桥香是什么意思| 114514是什么梗| 下体有异味是什么原因| 什么的小船| 胸部里面有个圆圆的硬东西是什么| 蛇鼠一窝是什么生肖| 慢性宫颈炎用什么药好| 早晨起来口苦是什么原因| 706代血浆又叫什么| 贴切的意思是什么| 半夜12点是什么时辰| 闭锁是什么意思| 头疼去医院挂什么科| 属牛男和什么属相最配| 辽宁舰舰长是什么军衔| 检查胃镜需要提前做什么准备| viomi是什么牌子| 汉武帝属什么生肖| 元气是什么| 郁郁寡欢是什么意思| 呕吐是什么原因| 丹青指什么| 梦见死人了是什么预兆| 打鼾是什么原因导致的| 秀米是什么| 宝宝积食发烧吃什么药| 梦到棺材什么意思| 摇曳是什么意思| 美国属于什么洲| 沙棘是什么植物| 4090是什么意思| 鹞子是什么鸟| 北极熊代表什么生肖| 胃酸胃胀反酸水吃什么药| 轻度脑萎缩是什么意思| 胳膊麻是什么原因| 小孩肚子疼是什么原因引起的| 色拉油是什么油| 脚上长水泡是什么原因引起的| 老烂腿抹什么药膏最好| 月经流的是什么血| 胸外科是看什么病的| 吊孝是什么意思| 无精是什么原因造成的| 日本人为什么喜欢喝冰水| 北京晚上有什么好玩的景点| 开车不能穿什么鞋| 梦见拔花生是什么预兆| 孟姜女姓什么| 梦见在河里抓鱼是什么征兆| 免疫力低会引起什么病| 经常便秘吃什么药好| 爆竹声中一岁除下一句是什么| 舒化奶适合什么人喝| 薄荷叶有什么功效| 氯超标是因为什么原因| 什么什么不得| 电起火用什么灭火器| 五月十日是什么星座| 早餐一般吃什么| 不是经期有少量出血是什么原因| 什么是息肉| 哥哥的哥哥叫什么| 乌龟吃什么| 画是什么结构| 政治家是什么意思| 胆在什么位置| 布洛芬是什么药| 冬瓜什么时候种植最好| 弱冠之年是什么意思| 庚子五行属什么| 脂肪肝喝什么茶| 碳酸氢铵是什么| 鱼油对身体有什么好处| 应急车道是什么意思| 端午节吃什么| 1909年属什么生肖| 为什么没有西京| 知了为什么要叫| 阿昔洛韦片治什么病| medicine什么意思| 墨镜偏光是什么意思| 无花果和什么煲汤好| 潸然泪下是什么意思| 美背是什么| 肠胃消化不好吃什么药| 半夜容易醒是什么原因| 宝宝吐奶是什么原因| 什么竹子| 开车压到猫有什么预兆| 猕猴桃和什么榨汁好喝| 什么网名| 双相障碍是什么| 今年7岁属什么生肖| 过敏性紫癜是什么症状| 浮想联翩什么意思| 多晒太阳有什么好处| 书店买不到的书是什么书| 衿字五行属什么| 无所不用其极是什么意思| p医学代表什么意思| 肝风内动是什么意思| 干巴得是什么意思| 足贴为什么变黑出油| 植物的根有什么作用| 软柿子是什么意思| 中医行业五行属什么| xxoo什么意思| 向日葵什么时候采摘| 小舌头学名叫什么| 鲤鱼爱吃什么食物| 什么是血管瘤| 中国黄金为什么比其它金店便宜| 6月30是什么星座| 什么样的鲜花| 白菜是什么颜色| 由是什么意思| 笙箫是什么意思| 荔枝对身体有什么好处| 小儿鼻炎用什么药好| 溺爱的意思是什么| 尿酸520属于什么水平| 白蜜是什么| 百度
Supported Versions: Current (17) / 16 / 15 / 14 / 13
Development Versions: 18 / devel
Unsupported versions: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2
This documentation is for an unsupported version of PostgreSQL.
You may want to view the same page for the current version, or one of the other supported versions listed above instead.

9.15. JSON Functions and Operators

Table 9.43 shows the operators that are available for use with the two JSON data types (see Section 8.14).

Table 9.43. json and jsonb Operators

Operator Right Operand Type Description Example Example Result
-> int Get JSON array element (indexed from zero, negative integers count from the end) '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2 {"c":"baz"}
-> text Get JSON object field by key '{"a": {"b":"foo"}}'::json->'a' {"b":"foo"}
->> int Get JSON array element as text '[1,2,3]'::json->>2 3
->> text Get JSON object field as text '{"a":1,"b":2}'::json->>'b' 2
#> text[] Get JSON object at specified path '{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}' {"c": "foo"}
#>> text[] Get JSON object at specified path as text '{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}' 3

Note

There are parallel variants of these operators for both the json and jsonb types. The field/element/path extraction operators return the same type as their left-hand input (either json or jsonb), except for those specified as returning text, which coerce the value to text. The field/element/path extraction operators return NULL, rather than failing, if the JSON input does not have the right structure to match the request; for example if no such element exists. The field/element/path extraction operators that accept integer JSON array subscripts all support negative subscripting from the end of arrays.

The standard comparison operators shown in Table 9.1 are available for jsonb, but not for json. They follow the ordering rules for B-tree operations outlined at Section 8.14.4. See also Section 9.20 for the aggregate function json_agg which aggregates record values as JSON, the aggregate function json_object_agg which aggregates pairs of values into a JSON object, and their jsonb equivalents, jsonb_agg and jsonb_object_agg.

Some further operators also exist only for jsonb, as shown in Table 9.44. Many of these operators can be indexed by jsonb operator classes. For a full description of jsonb containment and existence semantics, see Section 8.14.3. Section 8.14.4 describes how these operators can be used to effectively index jsonb data.

Table 9.44. Additional jsonb Operators

Operator Right Operand Type Description Example
@> jsonb Does the left JSON value contain the right JSON path/value entries at the top level? '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb
<@ jsonb Are the left JSON path/value entries contained at the top level within the right JSON value? '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb
? text Does the string exist as a top-level key within the JSON value? '{"a":1, "b":2}'::jsonb ? 'b'
?| text[] Do any of these array strings exist as top-level keys? '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c']
?& text[] Do all of these array strings exist as top-level keys? '["a", "b"]'::jsonb ?& array['a', 'b']
|| jsonb Concatenate two jsonb values into a new jsonb value '["a", "b"]'::jsonb || '["c", "d"]'::jsonb
- text Delete key/value pair or string element from left operand. Key/value pairs are matched based on their key value. '{"a": "b"}'::jsonb - 'a'
- text[] Delete multiple key/value pairs or string elements from left operand. Key/value pairs are matched based on their key value. '{"a": "b", "c": "d"}'::jsonb - '{a,c}'::text[]
- integer Delete the array element with specified index (Negative integers count from the end). Throws an error if top level container is not an array. '["a", "b"]'::jsonb - 1
#- text[] Delete the field or element with specified path (for JSON arrays, negative integers count from the end) '["a", {"b":1}]'::jsonb #- '{1,b}'

Note

The || operator concatenates two JSON objects by generating an object containing the union of their keys, taking the second object's value when there are duplicate keys. All other cases produce a JSON array: first, any non-array input is converted into a single-element array, and then the two arrays are concatenated. It does not operate recursively; only the top-level array or object structure is merged.

Table 9.45 shows the functions that are available for creating json and jsonb values. (There are no equivalent functions for jsonb, of the row_to_json and array_to_json functions. However, the to_jsonb function supplies much the same functionality as these functions would.)

Table 9.45. JSON Creation Functions

Function Description Example Example Result

to_json(anyelement)

to_jsonb(anyelement)

Returns the value as json or jsonb. Arrays and composites are converted (recursively) to arrays and objects; otherwise, if there is a cast from the type to json, the cast function will be used to perform the conversion; otherwise, a scalar value is produced. For any scalar type other than a number, a Boolean, or a null value, the text representation will be used, in such a fashion that it is a valid json or jsonb value. to_json('Fred said "Hi."'::text) "Fred said \"Hi.\""
array_to_json(anyarray [, pretty_bool]) Returns the array as a JSON array. A PostgreSQL multidimensional array becomes a JSON array of arrays. Line feeds will be added between dimension-1 elements if pretty_bool is true. array_to_json('{{1,5},{99,100}}'::int[]) [[1,5],[99,100]]
row_to_json(record [, pretty_bool]) Returns the row as a JSON object. Line feeds will be added between level-1 elements if pretty_bool is true. row_to_json(row(1,'foo')) {"f1":1,"f2":"foo"}

json_build_array(VARIADIC "any")

jsonb_build_array(VARIADIC "any")

Builds a possibly-heterogeneously-typed JSON array out of a variadic argument list. json_build_array(1,2,'3',4,5) [1, 2, "3", 4, 5]

json_build_object(VARIADIC "any")

jsonb_build_object(VARIADIC "any")

Builds a JSON object out of a variadic argument list. By convention, the argument list consists of alternating keys and values. json_build_object('foo',1,'bar',2) {"foo": 1, "bar": 2}

json_object(text[])

jsonb_object(text[])

Builds a JSON object out of a text array. The array must have either exactly one dimension with an even number of members, in which case they are taken as alternating key/value pairs, or two dimensions such that each inner array has exactly two elements, which are taken as a key/value pair.

json_object('{a, 1, b, "def", c, 3.5}')

json_object('{{a, 1},{b, "def"},{c, 3.5}}')

{"a": "1", "b": "def", "c": "3.5"}

json_object(keys text[], values text[])

jsonb_object(keys text[], values text[])

This form of json_object takes keys and values pairwise from two separate arrays. In all other respects it is identical to the one-argument form. json_object('{a, b}', '{1,2}') {"a": "1", "b": "2"}

Note

array_to_json and row_to_json have the same behavior as to_json except for offering a pretty-printing option. The behavior described for to_json likewise applies to each individual value converted by the other JSON creation functions.

Note

The hstore extension has a cast from hstore to json, so that hstore values converted via the JSON creation functions will be represented as JSON objects, not as primitive string values.

Table 9.46 shows the functions that are available for processing json and jsonb values.

Table 9.46. JSON Processing Functions

Function Return Type Description Example Example Result

json_array_length(json)

jsonb_array_length(jsonb)

int Returns the number of elements in the outermost JSON array. json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]') 5

json_each(json)

jsonb_each(jsonb)

setof key text, value json

setof key text, value jsonb

Expands the outermost JSON object into a set of key/value pairs. select * from json_each('{"a":"foo", "b":"bar"}')
 key | value
-----+-------
 a   | "foo"
 b   | "bar"

json_each_text(json)

jsonb_each_text(jsonb)

setof key text, value text Expands the outermost JSON object into a set of key/value pairs. The returned values will be of type text. select * from json_each_text('{"a":"foo", "b":"bar"}')
 key | value
-----+-------
 a   | foo
 b   | bar

json_extract_path(from_json json, VARIADIC path_elems text[])

jsonb_extract_path(from_json jsonb, VARIADIC path_elems text[])

json

jsonb

Returns JSON value pointed to by path_elems (equivalent to #> operator). json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4') {"f5":99,"f6":"foo"}

json_extract_path_text(from_json json, VARIADIC path_elems text[])

jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[])

text Returns JSON value pointed to by path_elems as text (equivalent to #>> operator). json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4', 'f6') foo

json_object_keys(json)

jsonb_object_keys(jsonb)

setof text Returns set of keys in the outermost JSON object. json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')
 json_object_keys
------------------
 f1
 f2

json_populate_record(base anyelement, from_json json)

jsonb_populate_record(base anyelement, from_json jsonb)

anyelement Expands the object in from_json to a row whose columns match the record type defined by base (see note below). select * from json_populate_record(null::myrowtype, '{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "a b c"}}')
 a |   b       |      c
---+-----------+-------------
 1 | {2,"a b"} | (4,"a b c")

json_populate_recordset(base anyelement, from_json json)

jsonb_populate_recordset(base anyelement, from_json jsonb)

setof anyelement Expands the outermost array of objects in from_json to a set of rows whose columns match the record type defined by base (see note below). select * from json_populate_recordset(null::myrowtype, '[{"a":1,"b":2},{"a":3,"b":4}]')
 a | b
---+---
 1 | 2
 3 | 4

json_array_elements(json)

jsonb_array_elements(jsonb)

setof json

setof jsonb

Expands a JSON array to a set of JSON values. select * from json_array_elements('[1,true, [2,false]]')
   value
-----------
 1
 true
 [2,false]

json_array_elements_text(json)

jsonb_array_elements_text(jsonb)

setof text Expands a JSON array to a set of text values. select * from json_array_elements_text('["foo", "bar"]')
   value
-----------
 foo
 bar

json_typeof(json)

jsonb_typeof(jsonb)

text Returns the type of the outermost JSON value as a text string. Possible types are object, array, string, number, boolean, and null. json_typeof('-123.4') number

json_to_record(json)

jsonb_to_record(jsonb)

record Builds an arbitrary record from a JSON object (see note below). As with all functions returning record, the caller must explicitly define the structure of the record with an AS clause. select * from json_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int, b text, c int[], d text, r myrowtype)
 a |    b    |    c    | d |       r
---+---------+---------+---+---------------
 1 | [1,2,3] | {1,2,3} |   | (123,"a b c")

json_to_recordset(json)

jsonb_to_recordset(jsonb)

setof record Builds an arbitrary set of records from a JSON array of objects (see note below). As with all functions returning record, the caller must explicitly define the structure of the record with an AS clause. select * from json_to_recordset('[{"a":1,"b":"foo"},{"a":"2","c":"bar"}]') as x(a int, b text);
 a |  b
---+-----
 1 | foo
 2 |

json_strip_nulls(from_json json)

jsonb_strip_nulls(from_json jsonb)

json

jsonb

Returns from_json with all object fields that have null values omitted. Other null values are untouched. json_strip_nulls('[{"f1":1,"f2":null},2,null,3]') [{"f1":1},2,null,3]

jsonb_set(target jsonb, path text[], new_value jsonb [, create_missing boolean])

jsonb

Returns target with the section designated by path replaced by new_value, or with new_value added if create_missing is true (default is true) and the item designated by path does not exist. As with the path oriented operators, negative integers that appear in path count from the end of JSON arrays.

jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false)

jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}','[2,3,4]')

[{"f1":[2,3,4],"f2":null},2,null,3]

[{"f1": 1, "f2": null, "f3": [2, 3, 4]}, 2]

jsonb_insert(target jsonb, path text[], new_value jsonb [, insert_after boolean])

jsonb

Returns target with new_value inserted. If target section designated by path is in a JSONB array, new_value will be inserted before target or after if insert_after is true (default is false). If target section designated by path is in JSONB object, new_value will be inserted only if target does not exist. As with the path oriented operators, negative integers that appear in path count from the end of JSON arrays.

jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"')

jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"', true)

{"a": [0, "new_value", 1, 2]}

{"a": [0, 1, "new_value", 2]}

jsonb_pretty(from_json jsonb)

text

Returns from_json as indented JSON text. jsonb_pretty('[{"f1":1,"f2":null},2,null,3]')
[
    {
        "f1": 1,
        "f2": null
    },
    2,
    null,
    3
]

Note

Many of these functions and operators will convert Unicode escapes in JSON strings to the appropriate single character. This is a non-issue if the input is type jsonb, because the conversion was already done; but for json input, this may result in throwing an error, as noted in Section 8.14.

Note

The functions json[b]_populate_record, json[b]_populate_recordset, json[b]_to_record and json[b]_to_recordset operate on a JSON object, or array of objects, and extract the values associated with keys whose names match column names of the output row type. Object fields that do not correspond to any output column name are ignored, and output columns that do not match any object field will be filled with nulls. To convert a JSON value to the SQL type of an output column, the following rules are applied in sequence:

  • A JSON null value is converted to a SQL null in all cases.

  • If the output column is of type json or jsonb, the JSON value is just reproduced exactly.

  • If the output column is a composite (row) type, and the JSON value is a JSON object, the fields of the object are converted to columns of the output row type by recursive application of these rules.

  • Likewise, if the output column is an array type and the JSON value is a JSON array, the elements of the JSON array are converted to elements of the output array by recursive application of these rules.

  • Otherwise, if the JSON value is a string literal, the contents of the string are fed to the input conversion function for the column's data type.

  • Otherwise, the ordinary text representation of the JSON value is fed to the input conversion function for the column's data type.

While the examples for these functions use constants, the typical use would be to reference a table in the FROM clause and use one of its json or jsonb columns as an argument to the function. Extracted key values can then be referenced in other parts of the query, like WHERE clauses and target lists. Extracting multiple values in this way can improve performance over extracting them separately with per-key operators.

Note

All the items of the path parameter of jsonb_set as well as jsonb_insert except the last item must be present in the target. If create_missing is false, all items of the path parameter of jsonb_set must be present. If these conditions are not met the target is returned unchanged.

If the last path item is an object key, it will be created if it is absent and given the new value. If the last path item is an array index, if it is positive the item to set is found by counting from the left, and if negative by counting from the right - -1 designates the rightmost element, and so on. If the item is out of the range -array_length .. array_length -1, and create_missing is true, the new value is added at the beginning of the array if the item is negative, and at the end of the array if it is positive.

Note

The json_typeof function's null return value should not be confused with a SQL NULL. While calling json_typeof('null'::json) will return null, calling json_typeof(NULL::json) will return a SQL NULL.

Note

If the argument to json_strip_nulls contains duplicate field names in any object, the result could be semantically somewhat different, depending on the order in which they occur. This is not an issue for jsonb_strip_nulls since jsonb values never have duplicate object field names.

三栖明星是什么意思 小便黄是什么原因引起的 梦见骆驼是什么意思 暮雪是什么意思 孕妇缺铁对胎儿有什么影响
为什么要打破伤风 阿尔卑斯是什么意思 9月3号是什么日子 慢性咽炎挂什么科 头痛应该挂什么科
什么药止咳最好 64年属什么生肖 什么叫根管治疗 射手座最配什么星座 股长是什么级别
浪花像什么 香蕉有什么作用与功效 乌鸦飞进家里什么征兆 保税仓是什么意思 高沫是什么茶
6月17号什么星座hcv8jop4ns2r.cn 岁月静好浅笑安然什么意思bjhyzcsm.com 三杯鸡为什么叫三杯鸡hcv7jop6ns1r.cn 言字旁与什么有关hcv8jop4ns4r.cn d cup是什么意思hcv8jop5ns5r.cn
倾向是什么意思wmyky.com 蚯蚓中药叫什么hcv8jop2ns5r.cn 体重下降是什么原因hcv9jop5ns8r.cn 什么屁股摸不得hcv8jop7ns1r.cn 感染艾滋病有什么症状hcv8jop9ns2r.cn
吃什么可以长头发hcv9jop3ns6r.cn 儿茶是什么中药hcv7jop6ns0r.cn 忘年恋是什么意思hcv9jop6ns0r.cn 锡字五行属什么hcv8jop7ns9r.cn 侯亮平是什么级别hcv8jop0ns5r.cn
梦见走亲戚是什么意思hcv9jop2ns7r.cn 乳头经常痒是什么原因hcv9jop5ns1r.cn 鸢是什么意思hcv9jop6ns9r.cn 腿上有白色条纹是什么hcv9jop8ns3r.cn 飞检是什么意思beikeqingting.com
百度