IT人材をお探しの方は、まずはお電話ください。担当営業がすぐにご要望にマッチした人材をご提案いたします。
tel:03-6409-6766 お急ぎの方はお電話ください

ブログTOP > IT・技術関連 > SalesforceでUnexpected end of json inputが表示される原因と対策

SalesforceでUnexpected end of json inputが表示される原因と対策

IT・技術関連 更新日:2024.09.05
エンジニア採用
SalesforceでUnexpected end of json inputが表示される原因と対策

Salesforce Unexpected end of json input の概要 Salesforce Unexpected end of json inputは、主にプログラムの記述ミスにより発生します。具体的な例を紹介いたします。下記に記載しております。

Unexpected end of inputの例

Unexpected end of inputが発生する原因は記述ミスによるものがあります。下記は具体例になります。
var value = JSON.parse( localStorage["hoge" )
上記は”hoge”を]で括れていないことが原因で発生します。

記述ミス以外にも

記述ミス以外にもUnexpected end of inputは発生します。例えば下記になります。
function (error) {
var obj_error = JSON.parse(error);
}
コードを追うと、エラーを関数でキャッチしエラー処理を行いerrorに格納するといった処理になります。一見、どこに問題があるのか分かりません。

問題の原因

上記コードのどこに問題があったのか見ていきます。上記コードのjsonの記述箇所に注目してください。 chromeでの処理でJSON.parseは、空文字が入ると処理が出来ないとのことでエラーになりました。その対策として、nullを記述したらエラー原因はなくなります。その理由を説明します。

JSON.parseの対策

JSON.parse()でUnexpected end of inputを発生させないためにはnullを記述すればいいと書きましたが、具体的にはどうすればいいのか例を書きます。
function (error) {
var obj_error = JSON.parse(error || "null");
}
上記のようにJSON.parseの引数にnullを追加するとエラーが出なくなり正常に処理が出来ます。

何故処理できないのか

JSON.parseで使用されているJSONとは何か説明します。JSONは元々JavaScriptのオブジェクト記法を用いたデータ交換フォーマットになります。様々な言語で使用されておりデータの受け渡しがとても簡単にできるようになっております。JSONは、JavaScriptで使用されている記号である[]や{}を使用し、作成されています。JSONでは、その記法を使いサーバー送信などの処理を行なっております。

SalesforceでJSONを使用する

SalesforceでJSONを使用する際には、様々なメソッドがあります。Salesforceの公式HPにいくつか紹介されていましたので、紹介します。

JSON のメソッド

すべて静的なメソッドになります。主に下記になります。
  • createParser(jsonString)
  • deserialize(jsonString, apexType)
  • deserializeStrict(jsonString, apexType)
  • deserializeUntyped(jsonString)
  • serialize(objectToSerialize)
  • serialize(objectToSerialize, suppressApexObjectNulls)
  • serializePretty(objectToSerialize)
  • serializePretty(objectToSerialize, suppressApexObjectNulls)

createParser(jsonString)について

createParser(jsonString)は新しい JSON ジェネレータを返します。使用方法は、下記になります。
public static System.JSONGenerator createGenerator(Boolean prettyPrint)
JSONジェネレータがインデントされたJSONコンテンツを見栄えの良い印刷方式で作成するかどうか指定を行います。

deserialize(jsonString, apexType)について

指定された JSON 文字列を Apex オブジェクトの指定された型に並列化します。 使用例
Decimal n = (Decimal)JSON.deserialize(
               '100.1', Decimal.class);
System.assertEquals(n, 100.1);
JSON コンテンツに、System.Type 引数に存在しない属性 (存在しない項目など) が含まれている場合、一定の状況で並列化に失敗します。

deserializeStrict(jsonString, apexType)について

上記のメソッドとよく似ていますが、使用用途が異なります。使用例を下記に書きます。次の例は、JSON 文字列を Car クラスで表されるユーザ定義型のオブジェクト (この例で定義) に並列化します。 使用例

public class Car {
    public String ma;
    public String y;
}
public void parse() {
    Car c = (Car)JSON.deserializeStrict(
        '{"ma":"SF,"y":"2020"}',
        Car.class);
    System.assertEquals(c.ma, 'SF');
    System.assertEquals(c.y, '2020');
}

deserializeUntyped(jsonString)について

deserializeUntyped(jsonString)は指定された JSON 文字列をプリミティブデータ型のコレクションに並列化します。使い方は下記なります。
public static Object deserializeUntyped(String jsonString)
主にJSONで文字列を扱いたいときのメソッドになります。

serialize(objectToSerialize)について

serialize(objectToSerialize)は、Apex オブジェクトを JSON コンテンツに逐次化します。主な使用方法は下記になります。
public static String serialize(Object objectToSerialize)
JSONを使いクラスをシリアライズ化する際に使用します。

serialize2

serialize(objectToSerialize, suppressApexObjectNulls)は、Apex オブジェクトを JSON コンテンツにシリアライズ化し、見栄えのよい印刷形式を使用してインデントされたコンテンツを生成します。 使用例
public static String serializePretty(Object objectToSerialize)

serializePretty(objectToSerialize)について

serializePretty(objectToSerialize)は、Apex オブジェクトを JSON コンテンツに逐次化し、見栄えのよい印刷形式を使用してインデントされたコンテンツを生成します。上記とよく似ていますが、serializePretty(objectToSerialize)はnull値を抑制することが出来ません。

serializePrettyについて

serializePretty(objectToSerialize, suppressApexObjectNulls)はApex オブジェクトを JSON コンテンツに逐次化するときに null 値を抑制し、見栄えのよい印刷形式を使用してインデントされたコンテンツを生成します。上記ともよく似ていますが、これはtrueの場合、JSONオブジェクトをシリアライズ化する前にnullを削除します。

使用例

主な使用例が下記になります。
public static String serializePretty(Object objectToSerialize, Boolean suppressApexObjectNulls)

最後に

Salesforce Unexpected end of json inputとSalesforceで使用できるJSON関数について書きました。記述ミスでエラーが起こること、便利なJSON関数があることを説明しました。
]]>

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニアAWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。

・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
ITエンジニアの派遣を利用したい企業様へ
ITエンジニアを派遣で採用したい企業様へ
  • 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
  • すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!

当社のITエンジニア派遣サービスは

  • 派遣スピードが速い!(最短即日)
  • 4,500名のエンジニアから貴社にマッチした人材を派遣
  • 正社員雇用も可能

こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。

無料相談のお申し込みはこちら
IT・技術関連の記事一覧へ

カテゴリから記事を探す

すべての記事一覧へ