You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex中如何在JSON负载中插入布尔值

解决Oracle Apex中PL/SQL布尔变量拼接JSON的问题

问题原因

  • PL/SQL的布尔类型无法直接与字符串拼接,强制拼接会触发PLS-00306参数数量或类型不匹配错误。
  • JSON规范中的布尔值是小写的true/false(无引号),如果传入带引号的'True'/'False'字符串,会被识别为字符串类型,不符合接口要求。

解决方案

方案1:用CASE语句转换布尔变量为JSON兼容的字符串

将PL/SQL布尔变量通过CASE语句转为小写的'true'或'false'字符串,直接拼入JSON结构中(不需要加引号),生成的JSON中对应字段就是合法的布尔类型。

修改后的代码:

v_json_data := '{
           "client_id":"' || :P290_CLIENT_ID || 
           '","secret":"' || :P290_SECRET || 
           '","company_name":"' || :P290_COMPANY_NAME || 
           '","address":{"city":"' || :P290_CITY || '","street":"' || :P290_STREET || '","region":"' || :P290_REGION || '","postal_code":"' || :P290_POSTAL_CODE || '","country_code":"' || :P290_COUNTRY_CODE || '"},
           "application_name":"' || :P290_APPLICATION_NAME || 
           '","legal_entity_name":"' || :P290_LEGAL_ENTITIY_NAME || 
           '","website":"' || :P290_WEBSITE ||
           '","is_diligence_attested":' || CASE WHEN v_is_diligence_attested THEN 'true' ELSE 'false' END ||
           ',"is_bank_addendum_completed":' || CASE WHEN v_is_bank_addendum_completed THEN 'true' ELSE 'false' END ||
           ',"products":["auth","transactions"],
           "technical_contact":{"given_name":"Snoop Dog","family_name":"The OG","email":"SWED@email.com"},
           "billing_contact":{"given_name":"Martha","family_name":"Stewart","email":"BBTG@email.com"},
           "customer_support_info":{"email":"AADD@email.com","phone_number":"111-111-1111","contact_url":"thisaurl.com","link_update_url":"updateurl.com"},
           "assets_under_management":{"amount":100,"iso_currency_code":"USD"},
           "registration_number":"100"
       }';

方案2:使用Oracle原生JSON构造函数(推荐)

避免手动拼接字符串的风险,改用JSON_OBJECT函数构建整个JSON对象,该函数会自动处理PL/SQL布尔类型到JSON布尔类型的转换,同时还能规避SQL注入等问题。

示例代码:

v_json_data := JSON_OBJECT(
    'client_id' VALUE :P290_CLIENT_ID,
    'secret' VALUE :P290_SECRET,
    'company_name' VALUE :P290_COMPANY_NAME,
    'address' VALUE JSON_OBJECT(
        'city' VALUE :P290_CITY,
        'street' VALUE :P290_STREET,
        'region' VALUE :P290_REGION,
        'postal_code' VALUE :P290_POSTAL_CODE,
        'country_code' VALUE :P290_COUNTRY_CODE
    ),
    'application_name' VALUE :P290_APPLICATION_NAME,
    'legal_entity_name' VALUE :P290_LEGAL_ENTITIY_NAME,
    'website' VALUE :P290_WEBSITE,
    'is_diligence_attested' VALUE v_is_diligence_attested,
    'is_bank_addendum_completed' VALUE v_is_bank_addendum_completed,
    'products' VALUE JSON_ARRAY('auth','transactions'),
    'technical_contact' VALUE JSON_OBJECT(
        'given_name' VALUE 'Snoop Dog',
        'family_name' VALUE 'The OG',
        'email' VALUE 'SWED@email.com'
    ),
    'billing_contact' VALUE JSON_OBJECT(
        'given_name' VALUE 'Martha',
        'family_name' VALUE 'Stewart',
        'email' VALUE 'BBTG@email.com'
    ),
    'customer_support_info' VALUE JSON_OBJECT(
        'email' VALUE 'AADD@email.com',
        'phone_number' VALUE '111-111-1111',
        'contact_url' VALUE 'thisaurl.com',
        'link_update_url' VALUE 'updateurl.com'
    ),
    'assets_under_management' VALUE JSON_OBJECT(
        'amount' VALUE 100,
        'iso_currency_code' VALUE 'USD'
    ),
    'registration_number' VALUE '100'
).TO_STRING();

说明

  • 方案1适合快速修改现有代码,方案2更规范、安全,推荐在新开发场景中使用。
  • 两种方法生成的JSON中,布尔字段都会是true或false(无引号),完全符合JSON规范和接口要求。

内容的提问来源于stack exchange,提问作者LogicallyFunky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:32:21