Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

دوال JSON

أنواع دوال JSON

هناك مجموعتان من الدوال لتحليل JSON:

  • simpleJSON* (visitParam*) وهي مصممة لتحليل مجموعة فرعية محدودة من JSON بسرعة فائقة.
  • JSONExtract* وهي مصممة لتحليل JSON العادي.

دوال simpleJSON ‏(visitParam)

يحتوي ClickHouse على دوال خاصة للعمل مع JSON المبسّط. تستند جميع دوال JSON هذه إلى افتراضات صارمة بشأن الشكل الذي يمكن أن يكون عليه JSON. وتحاول تنفيذ أقل قدر ممكن من المعالجة لإنجاز المهمة بأسرع ما يمكن.

تُفترض الافتراضات التالية:

  1. يجب أن يكون اسم الحقل (وسيطة الدالة) ثابتًا.
  2. يجب أن يكون اسم الحقل مُرمَّزًا داخل JSON بطريقة معيارية ما. على سبيل المثال: simpleJSONHas('{"abc":"def"}', 'abc') = 1، لكن simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0
  3. يُبحث عن الحقول في أي مستوى من مستويات التداخل، دون تمييز. وإذا وُجدت عدة حقول متطابقة، فيُستخدم أول ظهور.
  4. لا يحتوي JSON على محارف مسافة خارج القيم النصية الحرفية.

دوال JSONExtract

تعتمد هذه الدوال على simdjson، وقد صُممت لتلبية متطلبات تحليل JSON الأكثر تعقيدًا.

دوال JSONExtract غير الحساسة لحالة الأحرف

تُجري هذه الدوال مطابقة المفاتيح دون مراعاة حالة أحرف ASCII عند استخراج القيم من كائنات JSON. وهي تعمل تمامًا مثل نظيراتها الحساسة لحالة الأحرف، باستثناء أن مطابقة مفاتيح الكائنات تتم من دون مراعاة حالة الأحرف. وعند وجود عدة مفاتيح متطابقة مع اختلاف حالة الأحرف، تُعاد أول مطابقة.

صياغة JSONPath

تقبل الدوال JSON_EXISTS وJSON_VALUE وJSON_QUERY تعبير JSONPath كوسيطة ثانية. يدعم ClickHouse مجموعة فرعية محدودة من JSONPath، تستند بصورة عامة إلى معيار SQL/JSON ‏(ISO/IEC TR 19075-6)، وهي أضيق نطاقًا عمدًا من RFC 9535 والتنفيذات الشائعة الأخرى. تُدرج عوامل التشغيل المدعومة أدناه.

يوجد التنفيذ المعتمد في src/Functions/JSONPath/Parsers.

العوامل المدعومة

البنية الوصف المثال
$ العنصر الجذر. يجب أن يبدأ كل مسار به. $
.key الوصول إلى العضو بصيغة النقطة دون اقتباس. يمكن أن يبدأ المفتاح بأرقام أو أن يتكوّن منها فقط. $.store.book, $.1key, $.123
."key" الوصول إلى العضو بصيغة النقطة مع اقتباس. استخدمه للمفاتيح التي تحتوي على مسافات أو أحرف خاصة. تُقبل علامات الاقتباس المزدوجة أو علامات الاقتباس الخلفية. $."foo bar"
[key] الوصول إلى العضو بصيغة الأقواس دون اقتباس. $[hello]
['key'] الوصول إلى العضو بصيغة الأقواس مع اقتباس. تُقبل علامات الاقتباس المفردة أو المزدوجة أو علامات الاقتباس الخلفية. $['foo bar']
[n] الوصول إلى عنصر في مصفوفة حسب الفهرس (يبدأ من 0). $.items[0]
[n, m, ...] الوصول إلى عدة عناصر من المصفوفة. $.items[0, 2, 4]
[n to m] نطاق من عناصر المصفوفة. فهرس النهاية m غير شامل. $.items[0 to 3]
[*] حرف بدل يطابق جميع عناصر المصفوفة. $.items[*]

ملاحظات:

  • يمكن دمج الفهارس والنطاقات داخل زوج الأقواس نفسه (على سبيل المثال، [0 to 2, 4]).
  • لا يمكن دمج نطاقات الفهارس وحرف البدل داخل زوج الأقواس نفسه (على سبيل المثال، [* , 0] غير صالح).
  • في النطاق [n to m]، يجب أن تكون البداية n أصغر من النهاية m، وإلا يُثار استثناء.
  • الفهرس المفرد [n] مكافئ للنطاق `[n to n+1].

العوامل غير المدعومة

عوامل JSONPath التالية، المتاحة في RFC 9535 أو في تطبيقات أخرى، غير مدعومة في ClickHouse:

بنية الوصف
.. نزول تعاودي.
?(@.expr) تعبيرات التصفية.
[start:end:step] صياغة الشرائح. استخدم [n to m] بدلًا منها.
@ مرجع العقدة الحالية.
[-n] فهارس المصفوفات السالبة (من النهاية).
Script expressions تعبيرات حسابية أو دوال داخل مسار.
ON ERROR / ON EMPTY بنود SQL/JSON القياسية للتحكم في سلوك الخطأ والحالات الفارغة.

JSONAllPaths

أُضيف في: v24.8.0

يعيد قائمة بجميع المسارات المخزنة في كل صف ضمن عمود JSON.

الصيغة

JSONAllPaths(json)

الوسائط

  • json — عمود JSON. 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']          │
└────────────────────────────────┴────────────────────┘

JSONAllPathsWithTypes

أُضيفت في: v24.8.0

تعيد قائمة بجميع المسارات وأنواع البيانات المرتبطة بها والمخزنة في كل صف من عمود JSON.

البنية

JSONAllPathsWithTypes(json)

الوسائط

  • json — عمود JSON. 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'} │
└────────────────────────────────┴───────────────────────────────────────────┘

JSONAllValues

أُضيف في: v26.4.0

يعيد جميع القيم من كل صف في عمود JSON على شكل مصفوفة من السلاسل النصية. تُسلسَل القيم بصياغتها النصية وتُرتَّب حسب أسماء المسارات.

الصياغة

JSONAllValues(json)

الوسائط

  • json — عمود JSON. 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'] │
└────────────────────────────────┴──────────────────────────┘

JSONArrayLength

تم تقديمها في: v23.2.0

تعيد عدد العناصر في مصفوفة JSON ذات المستوى الأعلى. تعيد الدالة NULL إذا كانت سلسلة JSON المُدخلة غير صالحة.

البنية

JSONArrayLength(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 │
└─────────────────────┴────────────────────────────┘

JSONDynamicPaths

تم تقديمه في: v24.8.0

يعيد قائمة المسارات الديناميكية المخزَّنة كأعمدة فرعية منفصلة في عمود JSON.

الصيغة

JSONDynamicPaths(json)

المعاملات

  • json — عمود JSON. 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 — عمود JSON. 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))'}  │
└────────────────────────────────┴─────────────────────────────────┘

JSONExtract

قُدِّم في: 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]) │
└──────────────────────────┘

JSONExtractArrayRaw

أُضيف في: 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','"hello"'] │
└──────────────────────────┘

JSONExtractArrayRawCaseInsensitive

أُضيف في: 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')
['1','2','3']

JSONExtractBool

طُرح في: 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;
┌─res─┐
│   1 │
└─────┘

JSONExtractBoolCaseInsensitive

أُضيفت في: 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')
1

JSONExtractCaseInsensitive

أُضيفت في: 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')
123

array_type

SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)')
[1,2,3]

JSONExtractFloat

قُدِّم في: 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;
┌─res─┐
│ 200 │
└─────┘

JSONExtractFloatCaseInsensitive

أُضيفت في: 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')
12.34

JSONExtractInt

أُضيفت في: 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 │
└──────┘

JSONExtractIntCaseInsensitive

أُضيف في: 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')
123

متداخل

SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count')
42

JSONExtractKeys

أُضيفت في: 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'] │
└───────────┘

JSONExtractKeysAndValues

أُضيف في: 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}}', 'x', 'Int8') 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

يعيد مصفوفة من Tuple تتضمن المفاتيح والقيم من كائن 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]'),('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')]

JSONExtractKeysCaseInsensitive

أُضيف في: 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}')
['Name','AGE']

متداخل

SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user')
['name','AGE']

JSONExtractRaw

أُضيف في: 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,300] │
└────────────────┘

JSONExtractRawCaseInsensitive

أُضيف في: 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')
{"key":"value"}

JSONExtractString

طُرح في: 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 │
└───────┘

JSONExtractStringCaseInsensitive

أُضيفت في: 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')
def

Nested

SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name')
John

JSONExtractUInt

أُضيف في: 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;
┌─res─┐
│ 300 │
└─────┘

JSONExtractUIntCaseInsensitive

أُضيف في: 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')
789

JSONHas

أُضيف في: 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;
1
1

JSONKey

تم تقديمه في: 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);
a

JSONLength

ظهر في: 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;
1
1

JSONMergePatch

أُضيف في: 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"} │
└───────────────────────┘

JSONSharedDataPaths

قُدِّمت في: v24.8.0

يعيد قائمة المسارات المخزَّنة في بنية البيانات المشتركة ضمن عمود JSON.

الصياغة

JSONSharedDataPaths(json)

الوسائط

  • json — عمود JSON. 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 — عمود JSON. 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'}                       │
└────────────────────────────────┴────────────────────────────────────┘

JSONType

استُحدث في: 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';
1
1
1

JSON_EXISTS

أُضيف في: v21.8.0

إذا كانت القيمة موجودة في مستند JSON، فستُعاد 1. إذا لم تكن القيمة موجودة، فستُعاد 0.

البنية

JSON_EXISTS(json, path)

الوسائط

  • 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}', '$.hello')─┐
│                                     1 │
└───────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world')─┐
│                                                     1 │
└───────────────────────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":["world"]}', '$.hello[*]')─┐
│                                                1 │
└──────────────────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":["world"]}', '$.hello[0]')─┐
│                                                1 │
└──────────────────────────────────────────────────┘

JSON_QUERY

أُضيف في: v21.8.0

يُحلِّل JSON ويستخرج قيمةً بصيغة مصفوفة JSON أو كائن JSON. إذا لم تكن القيمة موجودة، فسيُعاد نص فارغ.

الصيغة

JSON_QUERY(json, path)

المعاملات

  • 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

JSON_VALUE

أُضيفت في: 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_VALUE(json, path)

الوسيطات

  • 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;
world
0
2
\N

dynamicElement

أُضيفت في: 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]                           │                      ᴺᵁᴸᴸ │ []                                 │
└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘

dynamicType

أُضيف في: v24.1.0

يعيد اسم النوع الفعلي لكل صف في عمود Dynamic.

بالنسبة إلى الصفوف التي تحتوي على NULL، تُعيد الدالة 'None'. أما في جميع الصفوف الأخرى، فتُعيد نوع البيانات الفعلي المخزَّن في ذلك الصف من عمود Dynamic (على سبيل المثال: 'Int64' و'String' و'Array(Int64)').

البنية

dynamicType(dynamic)

الوسائط

  • 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! │ false                           │
│ [1,2,3]       │ true                            │
└───────────────┴─────────────────────────────────┘

isValidJSON

أُضيف في: v20.1.0

يتحقق من أن السلسلة النصية المُمرَّرة بتنسيق JSON صالح.

الصيغة

isValidJSON(json)

المعاملات

  • json — سلسلة JSON المطلوب التحقق من صحتها String

القيمة المُعادة

يعيد 1 إذا كانت السلسلة JSON صالحة، وإلا 0. UInt8

أمثلة

مثال على الاستخدام

SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1;
SELECT isValidJSON('not JSON') = 0;
1
1

استخدام الأعداد الصحيحة للوصول إلى مصفوفات 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);
0
1
1
1
1
0

prettyPrintJSON

أُضيفت في: v26.4.0

يعيد نسخة منسّقة من سلسلة JSON، مع أسطر جديدة ومسافات بادئة.

البنية

prettyPrintJSON(json [, indent])

الوسائط

  • json — سلسلة JSON صالحة لتنسيقها. String
  • indent — عدد المسافات لكل مستوى من الإزاحة. الافتراضي: 4. الحد الأقصى: 32 UInt*

القيمة المُعادة

سلسلة JSON منسّقة لسهولة القراءة. String

أمثلة

كائن بسيط

SELECT prettyPrintJSON('{"a":1,"b":"hello"}');
{\n    "a": 1,\n    "b": "hello"\n}

مسافة بادئة مخصّصة

SELECT prettyPrintJSON('{"a":1}', 8);
{\n        "a": 1\n}

simpleJSONExtractBool

أُضيف في: 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;
0
1
0
0

simpleJSONExtractFloat

أُضيف في: 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;
0
-4000
0
-3.4
5

simpleJSONExtractInt

قُدِّم في: 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;
0
-4
0
-3
5

simpleJSONExtractRaw

أُضيف في: 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]}

simpleJSONExtractString

أُضيفت في: 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;
\n\0

simpleJSONExtractUInt

تم تقديمه في: 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;
0
4
0
3
5

simpleJSONHas

أُضيف في: 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;
1
0

toJSONString

أُضيف في: v21.7.0

يحوِّل قيمة إلى تمثيلها بتنسيق JSON. وتُدعَم أنواع البيانات المختلفة والبُنى المتداخلة. تُحاط الأعداد الصحيحة بطول 64 بت أو أكثر (مثل UInt64 أو Int128) بعلامات اقتباس افتراضيًا. ويحدّد output_format_json_quote_64bit_integers هذا السلوك. تُستبدل القيم الخاصة NaN و inf بـ null. فعِّل الإعداد output_format_json_quote_denormals لإظهارها. عند تحويل قيمة Enum، تُخرج الدالة اسمها.

انظر أيضًا:

البنية

toJSONString(value)

الوسيطات

  • 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((1.25, NULL, nan, inf, -inf, []))─┐
│ [1.25,null,"nan","inf","-inf",[]]              │
└────────────────────────────────────────────────┘
Navigation