هناك مجموعتان من الدوال لتحليل JSON:
دوال simpleJSON (visitParam)
يحتوي ClickHouse على دوال خاصة للعمل مع JSON المبسّط. تستند جميع دوال JSON هذه إلى افتراضات صارمة بشأن الشكل الذي يمكن أن يكون عليه JSON. وتحاول تنفيذ أقل قدر ممكن من المعالجة لإنجاز المهمة بأسرع ما يمكن.
تُفترض الافتراضات التالية:
- يجب أن يكون اسم الحقل (وسيطة الدالة) ثابتًا.
- يجب أن يكون اسم الحقل مُرمَّزًا داخل JSON بطريقة معيارية ما. على سبيل المثال:
simpleJSONHas('{"abc":"def"}', 'abc') = 1، لكن simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0
- يُبحث عن الحقول في أي مستوى من مستويات التداخل، دون تمييز. وإذا وُجدت عدة حقول متطابقة، فيُستخدم أول ظهور.
- لا يحتوي JSON على محارف مسافة خارج القيم النصية الحرفية.
تعتمد هذه الدوال على simdjson، وقد صُممت لتلبية متطلبات تحليل JSON الأكثر تعقيدًا.
تُجري هذه الدوال مطابقة غير حساسة لحالة أحرف ASCII للمفاتيح عند استخراج القيم من كائنات JSON.
وهي تعمل تمامًا مثل نظيراتها الحساسة لحالة الأحرف، باستثناء أن مطابقة مفاتيح الكائنات تتم من دون مراعاة حالة الأحرف.
وعند وجود عدة مفاتيح متطابقة مع اختلاف حالة الأحرف، تُعاد أول مطابقة.
قد يكون أداء هذه الدوال أقل من نظيراتها الحساسة لحالة الأحرف، لذا استخدم دوال JSONExtract العادية إن أمكن.
أُضيف في: v24.8.0
يعيد قائمة بجميع المسارات المخزنة في كل صف ضمن عمود JSON.
الصيغة
الوسائط
القيمة المُعادة
يُرجع مصفوفةً تضم جميع المسارات في عمود JSON. Array(String)
أمثلة
مثال على الاستخدام
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}}
SELECT json, JSONAllPaths(json) FROM test;
┌─json─────────────────────────────────┬─JSONAllPaths(json)─┐
│ {"a":"42"} │ ['a'] │
│ {"b":"Hello"} │ ['b'] │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a','c'] │
└──────────────────────────────────────┴────────────────────┘
أُضيفت في: v24.8.0
تعيد قائمة بجميع المسارات وأنواع البيانات المرتبطة بها والمخزنة في كل صف من عمود JSON.
البنية
JSONAllPathsWithTypes(json)
الوسائط
القيمة المُعادة
تُرجع خريطة بجميع المسارات وأنواع بياناتها في عمود JSON. Map(String, String)
أمثلة
مثال على الاستخدام
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}}
SELECT json, JSONAllPathsWithTypes(json) FROM test;
┌─json─────────────────────────────────┬─JSONAllPathsWithTypes(json)───────────────┐
│ {"a":"42"} │ {'a':'Int64'} │
│ {"b":"Hello"} │ {'b':'String'} │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))','c':'Date'} │
└──────────────────────────────────────┴───────────────────────────────────────────┘
أُضيف في: v26.4.0
يعيد جميع القيم من كل صف في عمود JSON على شكل مصفوفة من السلاسل النصية.
تُسلسَل القيم بصياغتها النصية وتُرتَّب حسب أسماء المسارات.
الصياغة
الوسائط
القيمة المعادة
تعيد مصفوفة تضم جميع القيم كسلاسل نصية في عمود JSON. Array(String)
أمثلة
مثال على الاستخدام
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json": {"a": 42}}, {"json": {"b": "Hello"}}, {"json": {"a": [1, 2, 3], "c": "2020-01-01"}}
SELECT json, JSONAllValues(json) FROM test;
┌─json─────────────────────────────────┬─JSONAllValues(json)──────┐
│ {"a":42} │ ['42'] │
│ {"b":"Hello"} │ ['Hello'] │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['[1,2,3]','2020-01-01'] │
└──────────────────────────────────────┴──────────────────────────┘
تم تقديمها في: v23.2.0
تعيد عدد العناصر في مصفوفة JSON ذات المستوى الأعلى.
تعيد الدالة NULL إذا كانت سلسلة JSON المُدخلة غير صالحة.
البنية
الأسماء البديلة: JSON_ARRAY_LENGTH
الوسيطات
json — String يحتوي على JSON صالح. String
القيمة المعادة
يعيد عدد عناصر المصفوفة إذا كانت json سلسلة تمثل مصفوفة JSON صالحة، وإلا يعيد NULL. Nullable(UInt64)
أمثلة
مثال على الاستخدام
SELECT
JSONArrayLength(''),
JSONArrayLength('[1,2,3]');
┌─JSONArrayLength('')─┬─JSONArrayLength('[1,2,3]')─┐
│ ᴺᵁᴸᴸ │ 3 │
└─────────────────────┴────────────────────────────┘
تم تقديمه في: v24.8.0
يعيد قائمة المسارات الديناميكية المخزَّنة كأعمدة فرعية منفصلة في عمود JSON.
الصيغة
المعاملات
القيمة المُعادة
يعيد مصفوفة من المسارات الديناميكية في عمود JSON. Array(String)
أمثلة
مثال على الاستخدام
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}}
SELECT json, JSONDynamicPaths(json) FROM test;
┌─json─────────────────────────────────┬─JSONDynamicPaths(json)─┐
│ {"a":"42"} │ ['a'] │
│ {"b":"Hello"} │ [] │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a'] │
└──────────────────────────────────────┴────────────────────────┘
JSONDynamicPathsWithTypes
أُضيفت في: v24.8.0
تعيد قائمة بالمسارات الديناميكية المخزّنة كأعمدة فرعية منفصلة، وأنواعها في كل صف ضمن عمود JSON.
البنية
JSONDynamicPathsWithTypes(json)
المعاملات
القيمة المُعادة
يعرض خريطة بالمسارات الديناميكية وأنواع بياناتها في عمود JSON. Map(String, String)
أمثلة
مثال للاستخدام
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}}
SELECT json, JSONDynamicPathsWithTypes(json) FROM test;
┌─json─────────────────────────────────┬─JSONDynamicPathsWithTypes(json)─┐
│ {"a":"42"} │ {'a':'Int64'} │
│ {"b":"Hello"} │ {} │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))'} │
└──────────────────────────────────────┴─────────────────────────────────┘
قُدِّم في: v19.14.0
يحلّل JSON ويستخرج قيمةً من نوع بيانات ClickHouse المحدد.
الصياغة
JSONExtract(json[, indices_or_keys, ...], return_type)
الوسيطات
json — سلسلة JSON المراد تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسيطات، ويمكن أن يكون كل منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
return_type — نوع بيانات ClickHouse المراد إرجاعه. String
القيمة المُعادة
يُعيد قيمة من نوع بيانات ClickHouse المحدَّد إن أمكن، وإلا يُعيد القيمة الافتراضية لذلك النوع.
أمثلة
مثال على الاستخدام
SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') AS res;
┌─res──────────────────────────────┐
│ ('hello',[-100,200,300]) │
└──────────────────────────────────┘
أُضيف في: v20.1.0
يعيد مصفوفةً تحتوي على عناصر من مصفوفة JSON، ويُمثَّل كل عنصر فيها كسلسلة غير محللة.
الصيغة
JSONExtractArrayRaw(json[, indices_or_keys, ...])
الوسيطات
json — سلسلة JSON نصية مطلوب تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسيطات، ويمكن أن يكون كل منها سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المُعادة
تُرجع مصفوفة من السلاسل النصية التي تحتوي على عناصر مصفوفة JSON. وإذا لم يكن الجزء مصفوفة أو لم يكن موجودًا، فستُرجع مصفوفة فارغة. Array(String)
أمثلة
مثال على الاستخدام
SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') AS res;
┌─res──────────────────────────┐
│ ['-100','200.0','"hello"'] │
└──────────────────────────────┘
أُضيف في: v25.8.0
يعيد مصفوفة تضم عناصر من مصفوفة JSON، ويُمثَّل كل عنصر فيها كسلسلة نصية غير محلَّلة، مع استخدام مطابقة المفاتيح دون مراعاة حالة الأحرف. تشبه هذه الدالة JSONExtractArrayRaw.
البنية
JSONExtractArrayRawCaseInsensitive(json [, indices_or_keys]...)
الوسيطات
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. الفهارس أو المفاتيح المستخدمة للتنقل داخل المصفوفة. تستخدم المفاتيح مطابقة غير حساسة لحالة الأحرف String أو (U)Int*
القيمة المُعادة
يعيد مصفوفة من سلاسل JSON الخام. Array(String)
أمثلة
أساسي
SELECT JSONExtractArrayRawCaseInsensitive('{"Items": [1, 2, 3]}', 'ITEMS')
طُرح في: v20.1.0
يُحلِّل JSON ويستخرج قيمة من النوع Bool.
البنية
JSONExtractBool(json[, indices_or_keys, ...])
الوسائط
json — سلسلة JSON المراد تحليلها. String
indices_or_keys — قائمة تتضمن صفرًا أو أكثر من الوسائط، ويمكن أن يكون كل منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المعادة
تعيد قيمة من نوع Bool إذا وُجدت، وإلا فتعيد 0. Bool
أمثلة
مثال على الاستخدام
SELECT JSONExtractBool('{"passed": true}', 'passed') AS res;
أُضيفت في: v25.8.0
يُحلّل JSON ويستخرج قيمة منطقية باستخدام مطابقة المفاتيح غير الحساسة لحالة الأحرف. هذه الدالة مشابهة لـ JSONExtractBool.
البنية
JSONExtractBoolCaseInsensitive(json [, indices_or_keys]...)
الوسيطات
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. الفهارس أو المفاتيح للتنقل إلى الحقل. تستخدم المفاتيح مطابقة غير حساسة لحالة الأحرف String أو (U)Int*
القيمة المُعادة
تعيد القيمة المنطقية المستخرجة (1 لـ true و0 لـ false)، و0 إذا لم يتم العثور عليها. UInt8
أمثلة
بسيط
SELECT JSONExtractBoolCaseInsensitive('{"IsActive": true}', 'isactive')
أُضيفت في: v25.8.0
تُحلِّل JSON وتستخرج قيمة بنوع بيانات ClickHouse المحدد باستخدام مطابقة المفاتيح دون تمييز بين الأحرف الكبيرة والصغيرة. هذه الدالة مشابهة لـ JSONExtract.
البنية
JSONExtractCaseInsensitive(json [, indices_or_keys...], return_type)
المعاملات
json — سلسلة JSON المراد تحليلها String
indices_or_keys — اختياري. الفهارس أو المفاتيح للوصول إلى الحقل. تخضع المفاتيح لمطابقة غير حساسة لحالة الأحرف String أو (U)Int*
return_type — نوع بيانات ClickHouse المراد استخراجه String
القيمة المُعادة
تُرجع القيمة المستخرجة بنوع البيانات المحدد. Any
أمثلة
int_type
SELECT JSONExtractCaseInsensitive('{"Number": 123}', 'number', 'Int32')
array_type
SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)')
قُدِّم في: v20.1.0
يحلّل JSON ويستخرج قيمة من نوع Float.
الصيغة
JSONExtractFloat(json[, indices_or_keys, ...])
الوسيطات
json — سلسلة JSON المراد تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسيطات، ويمكن أن يكون كلٌّ منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المُعادة
تُعيد قيمة من نوع Float إذا كانت موجودة، وإلا فتُعيد 0. Float64
أمثلة
مثال على الاستخدام
SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) AS res;
أُضيفت في: v25.8.0
تُحلّل JSON وتستخرج قيمة من النوع Float باستخدام مطابقة مفاتيح غير حساسة لحالة الأحرف. هذه الدالة مشابهة لـ JSONExtractFloat.
الصيغة
JSONExtractFloatCaseInsensitive(json [, indices_or_keys]...)
الوسائط
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. فهارس أو مفاتيح للوصول إلى الحقل. تُطابَق المفاتيح دون حساسية لحالة الأحرف String أو (U)Int*
القيمة المُعادة
تعيد قيمة Float المستخرجة، أو 0 إذا لم يتم العثور عليها أو تعذّر تحويلها. Float64
أمثلة
بسيط
SELECT JSONExtractFloatCaseInsensitive('{"Price": 12.34}', 'PRICE')
أُضيفت في: v20.1.0
تُحلِّل JSON وتستخرج قيمة من النوع Int.
الصياغة
JSONExtractInt(json[, indices_or_keys, ...])
الوسائط
json — سلسلة JSON المراد تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسائط، ويمكن أن يكون كلٌّ منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المعادة
تعيد قيمة من النوع Int إذا كانت موجودة، وإلا فتعيد 0. Int64
أمثلة
مثال على الاستخدام
SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) AS res;
┌──res─┐
│ -100 │
└──────┘
أُضيف في: v25.8.0
يحلّل JSON ويستخرج قيمة من نوع Int باستخدام مطابقة المفاتيح دون تمييز بين الأحرف الكبيرة والصغيرة. هذه الدالة مشابهة لـ JSONExtractInt.
الصياغة
JSONExtractIntCaseInsensitive(json [, indices_or_keys]...)
الوسيطات
json — سلسلة JSON المراد تحليلها String
indices_or_keys — اختياري. الفهارس أو المفاتيح المستخدمة للوصول إلى الحقل. تُطابَق المفاتيح دون تمييز بين الأحرف الكبيرة والصغيرة String أو (U)Int*
القيمة المُعادة
تعيد قيمة Int المستخرجة، أو 0 إذا لم يتم العثور عليها أو تعذّر تحويلها. Int64
أمثلة
بسيط
SELECT JSONExtractIntCaseInsensitive('{"Value": 123}', 'value')
متداخل
SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count')
أُضيفت في: v21.11.0
يحلّل سلسلة JSON ويستخرج المفاتيح.
الصياغة
JSONExtractKeys(json[, indices_or_keys, ...])
الوسيطات
json — سلسلة JSON المطلوب تحليلها. String
indices_or_keys — قائمة من صفر أو أكثر من الوسيطات، يمكن أن يكون كلٌّ منها سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المعادة
تُرجع مصفوفة تتضمن مفاتيح كائن JSON. Array(String)
أمثلة
مثال على الاستخدام
SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}') AS res;
┌─res─────────┐
│ ['a','b'] │
└─────────────┘
أُضيف في: v20.1.0
يحلّل أزواج المفتاح والقيمة من JSON، حيث تكون القيم من نوع بيانات ClickHouse المحدد.
الصيغة
JSONExtractKeysAndValues(json[, indices_or_keys, ...], value_type)
الوسيطات
json — سلسلة JSON المطلوب تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسيطات، ويمكن أن يكون كل منها سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
value_type — نوع بيانات ClickHouse للقيم. String
القيمة المُعادة
يعيد مصفوفة من قيم Tuple تحتوي على أزواج المفتاح والقيمة بعد تحليلها. Array(Tuple(String, value_type))
أمثلة
مثال على الاستخدام
SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'Int8', 'x') AS res;
┌─res────────────────────┐
│ [('a',5),('b',7),('c',11)] │
└────────────────────────┘
JSONExtractKeysAndValuesCaseInsensitive
تم تقديمها في: v25.8.0
يحلّل أزواج المفتاح-القيمة من JSON باستخدام مطابقة مفاتيح غير حساسة لحالة الأحرف. تشبه هذه الدالة JSONExtractKeysAndValues.
البنية
JSONExtractKeysAndValuesCaseInsensitive(json [, indices_or_keys...], value_type)
الوسائط
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. الفهارس أو المفاتيح للوصول إلى الكائن. تُطابَق المفاتيح دون مراعاة حالة الأحرف String أو (U)Int*
value_type — نوع بيانات ClickHouse للقيم String
القيمة المُعادة
تعيد مصفوفة من Tuples تحتوي على أزواج مفتاح-قيمة. Array(Tuple(String, T))
أمثلة
أساسي
SELECT JSONExtractKeysAndValuesCaseInsensitive('{"Name": "Alice", "AGE": 30}', 'String')
[('Name','Alice'),('AGE','30')]
JSONExtractKeysAndValuesRaw
أُضيفت في: v20.4.0
يعيد مصفوفة من Tuples تتضمن المفاتيح والقيم من كائن JSON. تُمثَّل جميع القيم كسلاسل نصية غير محلَّلة.
الصياغة
JSONExtractKeysAndValuesRaw(json[, indices_or_keys, ...])
الوسيطات
json — سلسلة JSON المطلوب تحليلها. String
indices_or_keys — قائمة تتكوّن من صفر أو أكثر من الوسيطات، ويمكن أن يكون كلٌّ منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المعادة
يعيد مصفوفة من قيم Tuple تحتوي على أزواج مفتاح-قيمة محللة، حيث تكون القيم سلاسل غير محللة. Array(Tuple(String, String))
أمثلة
مثال على الاستخدام
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b": "hello"}') AS res;
┌─res──────────────────────────────────┐
│ [('a','[-100,200.0]'),('b','"hello"')] │
└──────────────────────────────────────┘
JSONExtractKeysAndValuesRawCaseInsensitive
استُحدث في: v25.8.0
يستخرج أزواج المفتاح والقيمة الخام من JSON باستخدام مطابقة المفاتيح دون مراعاة حالة الأحرف. هذه الدالة مشابهة لـ JSONExtractKeysAndValuesRaw.
الصياغة
JSONExtractKeysAndValuesRawCaseInsensitive(json [, indices_or_keys]...)
الوسيطات
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. فهارس أو مفاتيح للوصول إلى الكائن. تُطابَق المفاتيح دون حساسية لحالة الأحرف String أو (U)Int*
القيمة المعادة
تعيد مصفوفة من قيم Tuple تحتوي على أزواج مفتاح-قيمة على شكل سلاسل نصية خام. Array(Tuple(String, String))
أمثلة
أساسي
SELECT JSONExtractKeysAndValuesRawCaseInsensitive('{"Name": "Alice", "AGE": 30}')
[('Name','"Alice"'),('AGE','30')]
أُضيف في: v25.8.0
يحلّل سلسلة JSON ويستخرج المفاتيح باستخدام مطابقة المفاتيح دون تمييز بين الأحرف الكبيرة والصغيرة للتنقّل داخل الكائنات المتداخلة. هذه الدالة مشابهة لـ JSONExtractKeys.
البنية
JSONExtractKeysCaseInsensitive(json [, indices_or_keys]...)
الوسيطات
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. فهارس أو مفاتيح للوصول إلى الكائن. تُطابَق المفاتيح دون حساسية لحالة الأحرف String أو (U)Int*
القيمة المعادة
تعيد مصفوفة من المفاتيح من كائن JSON. Array(String)
أمثلة
بسيط
SELECT JSONExtractKeysCaseInsensitive('{"Name": "Alice", "AGE": 30}')
متداخل
SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user')
أُضيف في: v20.1.0
يعيد جزءًا من JSON على هيئة سلسلة غير محلَّلة.
البنية
JSONExtractRaw(json[, indices_or_keys, ...])
الوسائط
json — سلسلة JSON المراد تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسائط، ويمكن أن يكون كلٌّ منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المُعادة
تُعيد الجزء من JSON كسلسلة غير محلّلة. وإذا لم يكن هذا الجزء موجودًا أو كان من نوع غير صحيح، فستُعاد سلسلة فارغة. String
أمثلة
مثال على الاستخدام
SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') AS res;
┌─res──────────────┐
│ [-100,200.0,300] │
└──────────────────┘
أُضيف في: v25.8.0
يعيد جزءًا من JSON على هيئة سلسلة نصية غير محللة باستخدام مطابقة للمفاتيح غير حساسة لحالة الأحرف. هذه الدالة مشابهة لـ JSONExtractRaw.
البنية
JSONExtractRawCaseInsensitive(json [, indices_or_keys]...)
الوسيطات
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. فهارس أو مفاتيح للوصول إلى الحقل. تستخدم المفاتيح مطابقة تتجاهل حالة الأحرف String أو (U)Int*
القيمة المُعادة
تعيد سلسلة JSON الخام للعنصر المستخرَج. String
أمثلة
كائن
SELECT JSONExtractRawCaseInsensitive('{"Object": {"key": "value"}}', 'OBJECT')
طُرح في: v20.1.0
يُحلِّل JSON ويستخرج قيمة من نوع String.
الصيغة
JSONExtractString(json[, indices_or_keys, ...])
الوسيطات
json — سلسلة JSON المراد تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسيطات، ويمكن أن يكون كل منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المُعادة
تُعيد قيمة من نوع String إذا كانت موجودة، وإلا فتُعيد سلسلة فارغة. String
أمثلة
مثال على الاستخدام
SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') AS res;
┌─res───┐
│ hello │
└───────┘
أُضيفت في: v25.8.0
يُحلّل JSON ويستخرج قيمة نصية باستخدام مطابقة المفاتيح دون مراعاة حالة الأحرف. هذه الدالة مشابهة لـ JSONExtractString.
الصيغة
JSONExtractStringCaseInsensitive(json [, indices_or_keys]...)
الوسائط
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. فهارس أو مفاتيح للتنقل إلى الحقل. وتدعم المفاتيح المطابقة غير الحساسة لحالة الأحرف String أو (U)Int*
القيمة المُعادة
يعيد قيمة السلسلة المستخرجة، أو سلسلة فارغة إذا لم يتم العثور عليها. String
أمثلة
أساسي
SELECT JSONExtractStringCaseInsensitive('{"ABC": "def"}', 'abc')
Nested
SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name')
أُضيف في: v20.1.0
يحلّل JSON ويستخرج قيمة من النوع UInt.
الصياغة
JSONExtractUInt(json [, indices_or_keys, ...])
الوسيطات
json — سلسلة JSON المطلوب تحليلها. String
indices_or_keys — قائمة تضم صفرًا أو أكثر من الوسيطات، ويمكن أن يكون كلٌّ منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int*
القيمة المُعادة
تُعيد قيمة UInt إذا كانت موجودة، وإلا تُعيد 0. UInt64
أمثلة
مثال على الاستخدام
SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) AS res;
أُضيف في: v25.8.0
يحلّل JSON ويستخرج قيمة من النوع UInt باستخدام مطابقة مفاتيح غير حساسة لحالة الأحرف. هذه الدالة مشابهة لـ JSONExtractUInt.
البنية
JSONExtractUIntCaseInsensitive(json [, indices_or_keys]...)
الوسائط
json — سلسلة JSON المطلوب تحليلها String
indices_or_keys — اختياري. فهارس أو مفاتيح للتنقل إلى الحقل. تستخدم المفاتيح مطابقة غير حساسة لحالة الأحرف String أو (U)Int*
القيمة المُعادة
تُرجع قيمة UInt المستخرجة، أو 0 إذا لم يتم العثور عليها أو تعذّر تحويلها. UInt64
أمثلة
بسيط
SELECT JSONExtractUIntCaseInsensitive('{"COUNT": 789}', 'count')
أُضيف في: v20.1.0
يتحقق من وجود القيمة أو القيم المُقدَّمة في مستند JSON.
البنية
JSONHas(json[ ,indices_or_keys, ...])
الوسائط
json — سلسلة JSON المراد تحليلها String
[ ,indices_or_keys, ...] — قائمة تضم صفرًا أو أكثر من الوسائط. String أو (U)Int*
القيمة المُعادة
تُرجع 1 إذا كانت القيمة موجودة في json، وإلا فـ0 UInt8
أمثلة
مثال على الاستخدام
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1;
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0;
تم تقديمه في: v20.1.0
يعيد مفتاح حقل في كائن JSON بحسب فهرسه (ابتداءً من 1). إذا مُرِّر JSON كسلسلة نصية، فسيُحلَّل أولًا. الوسيط الثاني هو مسار JSON للتنقل داخل الكائنات المتداخلة. تعيد الدالة اسم المفتاح في الموضع المحدد.
البنية
JSONKey(json[, indices_or_keys, ...])
الوسائط
json — سلسلة JSON المطلوب تحليلها. String
indices_or_keys — قائمة اختيارية بالفهرسات أو المفاتيح تحدد مسارًا إلى عنصر متداخل. يمكن أن تكون كل وسيطة إما سلسلة نصية (للوصول بالمفتاح) أو عددًا صحيحًا (للوصول بالفهرس بدءًا من 1). String أو Int*
القيمة المُعادة
تعيد اسم المفتاح عند الموضع المحدد داخل كائن JSON. String
أمثلة
مثال على الاستخدام
SELECT JSONKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1);
ظهر في: v20.1.0
يُرجع طول مصفوفة JSON أو كائن JSON.
إذا لم تكن القيمة موجودة أو كان نوعها غير صحيح، فستُعاد القيمة 0.
البنية
JSONLength(json [, indices_or_keys, ...])
الوسائط
json — سلسلة JSON المراد تحليلها String
[, indices_or_keys, ...] — اختياري. قائمة تتضمن صفرًا أو أكثر من الوسائط. String أو (U)Int8/16/32/64
القيمة المُعادة
يُرجع طول مصفوفة JSON أو كائن JSON، وإلا فيُرجع 0 إذا لم تكن القيمة موجودة أو كان نوعها غير صحيح. UInt64
أمثلة
مثال على الاستخدام
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3;
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2;
أُضيف في: v23.10.0
يعيد سلسلة كائن JSON مدمجة ناتجة عن دمج عدة كائنات JSON.
الصيغة
JSONMergePatch(json1[, json2, ...])
الأسماء المستعارة: jsonMergePatch
المعاملات
json1[, json2, ...] — سلسلة واحدة أو أكثر تحتوي على JSON صالح. String
القيمة المُعادة
يعيد سلسلة JSON للكائن المدمج، إذا كانت سلاسل كائنات JSON صالحة. String
أمثلة
مثال على الاستخدام
SELECT JSONMergePatch('{"a":1}', '{"name": "joey"}', '{"name": "tom"}', '{"name": "zoey"}') AS res;
┌─res───────────────────┐
│ {"a":1,"name":"zoey"} │
└───────────────────────┘
قُدِّمت في: v24.8.0
يعيد قائمة المسارات المخزَّنة في بنية البيانات المشتركة ضمن عمود JSON.
الصياغة
JSONSharedDataPaths(json)
الوسائط
القيمة المُعادة
تُرجع مصفوفة من المسارات المخزّنة في بنية البيانات المشتركة ضمن عمود JSON. Array(String)
أمثلة
مثال على الاستخدام
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}}
SELECT json, JSONSharedDataPaths(json) FROM test;
┌─json─────────────────────────────────┬─JSONSharedDataPaths(json)─┐
│ {"a":"42"} │ [] │
│ {"b":"Hello"} │ ['b'] │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['c'] │
└──────────────────────────────────────┴───────────────────────────┘
JSONSharedDataPathsWithTypes
أُضيفت في: v24.8.0
تعيد قائمة بالمسارات المخزَّنة في بنية البيانات المشتركة وأنواعها في كل صف ضمن عمود JSON.
الصياغة
JSONSharedDataPathsWithTypes(json)
الوسائط
القيمة المُعادة
يعيد خريطةً للمسارات المخزّنة في بنية البيانات المشتركة وأنواع بياناتها ضمن عمود JSON. Map(String, String)
أمثلة
مثال على الاستخدام
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}}
SELECT json, JSONSharedDataPathsWithTypes(json) FROM test;
┌─json─────────────────────────────────┬─JSONSharedDataPathsWithTypes(json)─┐
│ {"a":"42"} │ {} │
│ {"b":"Hello"} │ {'b':'String'} │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'c':'Date'} │
└──────────────────────────────────────┴─────────────────────────────────────┘
استُحدث في: v20.1.0
يعيد نوع قيمة JSON. وإذا لم تكن القيمة موجودة، فستتم إعادة Null=0.
البنية
JSONType(json[, indices_or_keys, ...])
الوسائط
json — سلسلة JSON المطلوب تحليلها String
json[, indices_or_keys, ...] — قائمة تضم صفرًا أو أكثر من الوسائط، ويمكن أن يكون كل منها إما سلسلة نصية أو عددًا صحيحًا. String أو (U)Int8/16/32/64
القيمة المُعادة
يُرجع نوع قيمة JSON كسلسلة نصية، وإذا لم تكن القيمة موجودة، فسيُرجع Null=0 Enum
أمثلة
مثال على الاستخدام
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object';
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String';
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array';
أُضيف في: v21.8.0
إذا كانت القيمة موجودة في مستند JSON، فستُعاد 1.
إذا لم تكن القيمة موجودة، فستُعاد 0.
البنية
الوسائط
json — سلسلة نصية تحتوي على JSON صالح. String
path — سلسلة نصية تمثل المسار. String
القيمة المُعادة
يعيد 1 إذا كانت القيمة موجودة في مستند JSON، وإلا فيعيد 0. UInt8
أمثلة
مثال على الاستخدام
SELECT JSON_EXISTS('{"hello":1}', '$.hello');
SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]');
┌─JSON_EXISTS(⋯ '$.hello')─┐
│ 1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯llo.world')─┐
│ 1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯.hello[*]')─┐
│ 1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯.hello[0]')─┐
│ 1 │
└──────────────────────────┘
أُضيف في: v21.8.0
يُحلِّل JSON ويستخرج قيمةً بصيغة مصفوفة JSON أو كائن JSON.
إذا لم تكن القيمة موجودة، فسيُعاد نص فارغ.
الصيغة
المعاملات
json — سلسلة نصية بتنسيق JSON صالح. String
path — سلسلة نصية تمثل المسار. String
القيمة المعادة
تعيد مصفوفة JSON أو كائن JSON المستخرَجَين على هيئة سلسلة نصية، أو سلسلة نصية فارغة إذا لم تكن القيمة موجودة. String
أمثلة
مثال على الاستخدام
SELECT JSON_QUERY('{"hello":"world"}', '$.hello');
SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_QUERY('{"hello":2}', '$.hello');
SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello'));
["world"]
[0, 1, 4, 0, -1, -4]
[2]
String
أُضيفت في: v21.11.0
تُحلّل هذه الدالة JSON وتستخرج قيمة منه كقيمة JSON scalar. وإذا لم تكن القيمة موجودة، فستُعاد سلسلة نصية فارغة افتراضيًا.
تخضع هذه الدالة للإعدادات التالية:
- عند استخدام SET
function_json_value_return_type_allow_nullable = true، ستُعاد NULL. وإذا كانت القيمة من نوع معقّد (مثل: struct أو array أو map)، فستُعاد سلسلة نصية فارغة افتراضيًا.
- عند استخدام SET
function_json_value_return_type_allow_complex = true، ستُعاد القيمة المعقّدة.
الصياغة
الوسيطات
json — سلسلة نصية تحتوي على JSON صالح. String
path — سلسلة نصية تمثل المسار. String
القيمة المُعادة
يعيد القيمة القياسية المستخرجة من JSON كسلسلة نصية، أو سلسلة فارغة إذا لم تكن القيمة موجودة. String
أمثلة
مثال على الاستخدام
SELECT JSON_VALUE('{"hello":"world"}', '$.hello');
SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_VALUE('{"hello":2}', '$.hello');
SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true;
أُضيفت في: v24.1.0
تستخرج عمودًا بالنوع المحدد من عمود Dynamic.
تتيح لك هذه الدالة استخراج قيم من نوع محدد من عمود Dynamic. إذا كان الصف يحتوي على قيمة
من النوع المطلوب، فإنها تُرجع تلك القيمة. وإذا كان الصف يحتوي على نوع مختلف أو NULL، فإنها تُرجع NULL
للأنواع المفردة أو مصفوفة فارغة لأنواع المصفوفات.
الصيغة
dynamicElement(dynamic, type_name)
الوسيطات
dynamic — عمود Dynamic المراد الاستخراج منه. Dynamic
type_name — اسم النوع المراد استخراجه من بين الأنواع الممكنة (مثل: ‘String’ و’Int64’ و’Array(Int64)’).
القيمة المُعادة
يعيد قيمًا من النوع المحدد من عمود Dynamic. ويعيد NULL للأنواع غير المطابقة (أو مصفوفة فارغة للأنواع من نوع Array). Any
أمثلة
استخراج أنواع مختلفة من عمود Dynamic
CREATE TABLE test (d Dynamic) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, dynamicType(d), dynamicElement(d, 'String'), dynamicElement(d, 'Int64'), dynamicElement(d, 'Array(Int64)'), dynamicElement(d, 'Date'), dynamicElement(d, 'Array(String)') FROM test
┌─d─────────────┬─dynamicType(d)─┬─dynamicElement(d, 'String')─┬─dynamicElement(d, 'Int64')─┬─dynamicElement(d, 'Array(Int64)')─┬─dynamicElement(d, 'Date')─┬─dynamicElement(d, 'Array(String)')─┐
│ ᴺᵁᴸᴸ │ None │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │
│ 42 │ Int64 │ ᴺᵁᴸᴸ │ 42 │ [] │ ᴺᵁᴸᴸ │ [] │
│ Hello, World! │ String │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │
│ [1,2,3] │ Array(Int64) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ ᴺᵁᴸᴸ │ [] │
└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘
أُضيف في: v24.1.0
يعيد اسم النوع الفعلي لكل صف في عمود Dynamic.
بالنسبة إلى الصفوف التي تحتوي على NULL، تُعيد الدالة ‘None’. أما في جميع الصفوف الأخرى، فتُعيد نوع البيانات الفعلي
المخزَّن في ذلك الصف من عمود Dynamic (على سبيل المثال: ‘Int64’ و’String’ و’Array(Int64)’).
البنية
الوسائط
dynamic — عمود Dynamic المطلوب فحصه. Dynamic
القيمة المعادة
تُرجع اسم نوع القيمة المخزنة في كل صف، أو ‘None’ لقيم NULL. String
أمثلة
فحص الأنواع في عمود Dynamic
CREATE TABLE test (d Dynamic) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, dynamicType(d) FROM test;
┌─d─────────────┬─dynamicType(d)─┐
│ ᴺᵁᴸᴸ │ None │
│ 42 │ Int64 │
│ Hello, World! │ String │
│ [1,2,3] │ Array(Int64) │
└───────────────┴────────────────┘
isDynamicElementInSharedData
أُضيف في: v24.1.0
يعيد true للصفوف في عمود Dynamic المخزَّنة بتنسيق Variant المشترك بدلًا من تخزينها كأعمدة فرعية منفصلة.
عندما يكون لعمود Dynamic حد max_types، فإن القيم التي تتجاوز هذا الحد تُخزَّن بتنسيق ثنائي مشترك
بدلًا من فصلها إلى أعمدة فرعية منفصلة بحسب النوع. تحدد هذه الدالة الصفوف المخزَّنة بهذا التنسيق المشترك.
الصيغة
isDynamicElementInSharedData(dynamic)
الوسيطات
dynamic — عمود Dynamic المراد فحصه. Dynamic
القيمة المُعادة
تُرجِع true إذا كانت القيمة مخزّنة بتنسيق shared variant format، وfalse إذا كانت مخزّنة كعمود فرعي منفصل أو كانت NULL. Bool
أمثلة
التحقق من تنسيق التخزين في عمود Dynamic مع حد max_types
CREATE TABLE test (d Dynamic(max_types=2)) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, isDynamicElementInSharedData(d) FROM test;
┌─d─────────────┬─isDynamicElementInSharedData(d)─┐
│ ᴺᵁᴸᴸ │ false │
│ 42 │ false │
│ Hello, World! │ true │
│ [1,2,3] │ true │
└───────────────┴─────────────────────────────────┘
أُضيف في: v20.1.0
يتحقق من أن السلسلة النصية المُمرَّرة بتنسيق JSON صالح.
الصيغة
المعاملات
json — سلسلة JSON المطلوب التحقق من صحتها String
القيمة المُعادة
يعيد 1 إذا كانت السلسلة JSON صالحة، وإلا 0. UInt8
أمثلة
مثال على الاستخدام
SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1;
SELECT isValidJSON('not JSON') = 0;
استخدام الأعداد الصحيحة للوصول إلى مصفوفات JSON وكائنات JSON
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 0);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 1);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 2);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -1);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -2);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 3);
أُضيفت في: v26.4.0
يعيد نسخة منسّقة من سلسلة JSON، مع أسطر جديدة ومسافات بادئة.
البنية
prettyPrintJSON(json [, indent])
الوسائط
json — سلسلة JSON صالحة لتنسيقها. String
indent — عدد المسافات لكل مستوى من الإزاحة. الافتراضي: 4. الحد الأقصى: 32 UInt*
القيمة المُعادة
سلسلة JSON منسّقة لسهولة القراءة. String
أمثلة
كائن بسيط
SELECT prettyPrintJSON('{"a":1,"b":"hello"}');
مسافة بادئة مخصّصة
SELECT prettyPrintJSON('{"a":1}', 8);
أُضيف في: v21.4.0
يحلّل قيمة true/false من قيمة الحقل المسمّى field_name.
النتيجة هي UInt8.
البنية
simpleJSONExtractBool(json, field_name)
الأسماء البديلة: visitParamExtractBool
الوسيطات
json — بيانات JSON التي يُبحث فيها عن الحقل. String
field_name — اسم الحقل المطلوب البحث عنه. const String
القيمة المعادة
تعيد 1 إذا كانت قيمة الحقل هي true، وإلا فتعيد 0. وهذا يعني أن هذه الدالة ستُعيد 0 أيضًا في الحالات التالية، وليس في هذه الحالات فقط:
- إذا كان الحقل غير موجود.
- إذا كان الحقل يحتوي على
true كسلسلة نصية، على سبيل المثال: {"field":"true"}.
- إذا كان الحقل يحتوي على
1 كقيمة رقمية. UInt8
أمثلة
مثال على الاستخدام
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":false,"bar":true}');
INSERT INTO jsons VALUES ('{"foo":"true","qux":1}');
SELECT simpleJSONExtractBool(json, 'bar') FROM jsons ORDER BY json;
SELECT simpleJSONExtractBool(json, 'foo') FROM jsons ORDER BY json;
أُضيف في: v21.4.0
يحلّل قيمة Float64 من قيمة الحقل المسمّى field_name.
إذا كان field_name حقلًا نصيًا، فسيحاول تحليل رقم من بداية السلسلة النصية.
إذا لم يكن الحقل موجودًا، أو كان موجودًا لكنه لا يحتوي على رقم، فسيُعيد 0.
الصياغة
simpleJSONExtractFloat(json, field_name)
الأسماء المستعارة: visitParamExtractFloat
المعاملات
json — مستند JSON الذي يُبحث فيه عن الحقل. String
field_name — اسم الحقل المراد البحث عنه. const String
القيمة المُعادة
ترجع الرقم المستخرَج من الحقل إذا كان الحقل موجودًا ويحتوي على رقم، وإلا فترجع 0. Float64
أمثلة
مثال على الاستخدام
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractFloat(json, 'foo') FROM jsons ORDER BY json;
قُدِّم في: v21.4.0
يحلّل قيمة Int64 من قيمة الحقل المسمّى field_name.
إذا كان field_name حقلًا نصيًا، فسيحاول تحليل رقم من بداية السلسلة النصية.
إذا لم يكن الحقل موجودًا، أو كان موجودًا ولكنه لا يحتوي على رقم، فستُعاد القيمة 0.
الصياغة
simpleJSONExtractInt(json, field_name)
الأسماء المستعارة: visitParamExtractInt
المعاملات
json — JSON الذي يُبحث فيه عن الحقل. String
field_name — اسم الحقل المراد البحث عنه. const String
القيمة المعادة
يعيد الرقم الذي جرى تحليله من الحقل إذا كان الحقل موجودًا ويحتوي على رقم، وإلا فيُعيد 0 Int64
أمثلة
مثال على الاستخدام
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractInt(json, 'foo') FROM jsons ORDER BY json;
أُضيف في: v21.4.0
يعيد قيمة الحقل المسمى field_name كسلسلة String، بما في ذلك الفواصل.
الصياغة
simpleJSONExtractRaw(json, field_name)
الأسماء المستعارة: visitParamExtractRaw
الوسيطات
json — نص JSON الذي يُبحث فيه عن الحقل. String
field_name — اسم الحقل المراد البحث عنه. const String
القيمة المعادة
تعيد قيمة الحقل كسلسلة نصية، بما في ذلك الفواصل إذا كان الحقل موجودًا، أو سلسلة نصية فارغة بخلاف ذلك String
أمثلة
مثال على الاستخدام
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":{"def":[1,2,3]}}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractRaw(json, 'foo') FROM jsons ORDER BY json;
"-4e3"
-3.4
5
{"def":[1,2,3]}
أُضيفت في: v21.4.0
يحلّل قيمة String محاطة بعلامتَي اقتباس مزدوجتين من قيمة الحقل المسمّى field_name.
تفاصيل التنفيذ
لا يوجد حاليًا دعم لنقاط الرمز بالتنسيق \uXXXX\uYYYY التي لا تنتمي إلى المستوى الأساسي متعدد اللغات (إذ تُحوَّل إلى CESU-8 بدلًا من UTF-8).
الصياغة
simpleJSONExtractString(json, field_name)
الأسماء البديلة: visitParamExtractString
الوسيطات
json — قيمة JSON التي يُبحث فيها عن الحقل. String
field_name — اسم الحقل المراد البحث عنه. const String
القيمة المُعادة
تُعيد قيمة الحقل كسلسلة نصية بعد فك الإفلات، بما في ذلك الفواصل. وتُعاد سلسلة نصية فارغة إذا لم يكن الحقل يحتوي على سلسلة نصية محاطة بعلامتي اقتباس مزدوجتين، أو إذا تعذّر فك الإفلات، أو إذا لم يكن الحقل موجودًا String
أمثلة
مثال على الاستخدام
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"\\n\\u0000"}');
INSERT INTO jsons VALUES ('{"foo":"\\u263"}');
INSERT INTO jsons VALUES ('{"foo":"\\u263a"}');
INSERT INTO jsons VALUES ('{"foo":"hello}');
SELECT simpleJSONExtractString(json, 'foo') FROM jsons ORDER BY json;
تم تقديمه في: v21.4.0
يستخرج قيمة UInt64 من قيمة الحقل المسمّى field_name.
إذا كان field_name حقلًا نصيًا، فسيحاول تحليل رقم من بداية السلسلة النصية.
إذا لم يكن الحقل موجودًا، أو كان موجودًا لكنه لا يحتوي على رقم، فستُعاد القيمة 0.
الصيغة
simpleJSONExtractUInt(json, field_name)
الأسماء البديلة: visitParamExtractUInt
الوسيطات
json — كائن JSON الذي يُبحث فيه عن الحقل. String
field_name — اسم الحقل المراد البحث عنه. const String
القيمة المعادة
تعيد الرقم الذي تم تحليله من الحقل إذا كان الحقل موجودًا ويحتوي على رقم، وتعيد 0 بخلاف ذلك UInt64
أمثلة
مثال على الاستخدام
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"4e3"}');
INSERT INTO jsons VALUES ('{"foo":3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractUInt(json, 'foo') FROM jsons ORDER BY json;
أُضيف في: v21.4.0
يتحقق مما إذا كان هناك حقل باسم field_name.
البنية
simpleJSONHas(json, field_name)
الأسماء المستعارة: visitParamHas
الوسائط
json — قيمة JSON التي يُبحث فيها عن الحقل. String
field_name — اسم الحقل المراد البحث عنه. const String
القيمة المعادة
يعيد 1 إذا كان الحقل موجودًا، وإلا فيُعيد 0 UInt8
أمثلة
مثال على الاستخدام
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"true","qux":1}');
SELECT simpleJSONHas(json, 'foo') FROM jsons;
SELECT simpleJSONHas(json, 'bar') FROM jsons;
أُضيف في: v21.7.0
يحوِّل قيمة إلى تمثيلها بتنسيق JSON. وتُدعَم أنواع البيانات المختلفة والبُنى المتداخلة.
تُحاط الأعداد الصحيحة بطول 64 بت أو أكثر (مثل UInt64 أو Int128) بعلامات اقتباس افتراضيًا. ويحدّد output_format_json_quote_64bit_integers هذا السلوك.
تُستبدل القيم الخاصة NaN و inf بـ null. فعِّل الإعداد output_format_json_quote_denormals لإظهارها.
عند تحويل قيمة Enum، تُخرج الدالة اسمها.
انظر أيضًا:
البنية
الوسيطات
value — القيمة المطلوب إجراء تسلسل لها. يمكن أن تكون القيمة من أي نوع بيانات. Any
القيمة المُعادة
تعيد التمثيل بصيغة JSON للقيمة. String
أمثلة
تسلسل Map
SELECT toJSONString(map('key1', 1, 'key2', 2));
┌─toJSONString(map('key1', 1, 'key2', 2))─┐
│ {"key1":1,"key2":2} │
└─────────────────────────────────────────┘
قيم خاصة
SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1;
┌─toJSONString(tuple(1.25, NULL, NaN, plus(inf), minus(inf), []))─┐
│ [1.25,null,"nan","inf","-inf",[]] │
└─────────────────────────────────────────────────────────────────┘