JAVA が JSON 文字列を生成する 3 つの方法

私の Android 開発経験は、ネイティブ Android プロジェクトの開発から始まりました。その後、同社はいくつかの医療機器会社と協力するプロジェクトを持っていたため、Android 側でブリッジング コードを記述し、それを React Native 側で同僚に呼び出す必要がありました。最初はいくつかのプロセスが理解できなかったので、単に toString を呼び出して RN に渡すだけでした.たとえば、RN 側の{code=NOT_INITIALIZED, message=Please initialize library}同僚がキーと値を取得するために独自の解析コードを作成する原因となった RN 側のデータは、これにより、共同デバッグが面倒になりました。その後、json文字列に変換してRN側に送る方法を勉強したところ、共同デバッグが格段にスムーズになりました。

以下では、JSON 文字列を連結する方法を示す例として、エラー処理によって返されるコードとメッセージを取り上げます。

// 演示数据
String code = "NOT_INITIALIZED";
String message = "Please initialize library";
复制代码

手動スプライス (非推奨)

jsonの構造を見てみましょう.キーと文字列型の値はどちらもダブルクォートで囲む必要があります.Javaにはjs''やダブルクォートを挿入するにはどうすればいいですか?答えはバックスラッシュと文字列を使用することです.

charおよびString変数の場合、スプライシングはより面倒です

char c1 = 'c';
String s1 = "s1";
System.out.println("{" + "\"c1\":" + "\"" + c1 + "\"" + "}");
System.out.println("{" + "\"s1\":" + "\"" + s1 + "\"" + "}");
复制代码

他のタイプの変数の場合、スプライシングは比較的単純です

boolean b1 = true;
float f1 = 34f;
double d1 = 33.2d;
System.out.println("{" + "\"b1\":" + b1 + "}");
System.out.println("{" + "\"f1\":" + f1 + "}");
System.out.println("{" + "\"d1\":" + d1 + "}");
复制代码

したがって、上記のデータの場合、スプライシングは次のようになります。

String jsonStr = "{" + "\"code\":" + "\"" + code + "\"" + "," + "\"message\":" + "\"" + message + "\"" + "}";
复制代码

これが推奨されないのはなぜですか?データ量は少なくても構いませんが、データ量が多すぎると、カンマを書き忘れたり、文字列の前後にバックスラッシュやダブルクォーテーションを付け忘れたりして、デバッグに時間がかかる場合があります。

Gson などの JSON ライブラリを使用する

  1. データクラスを定義する
class ErrorInfo {
    private String code;
    private String message;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
复制代码
  1. Gson の toJson メソッドを使用する
import com.google.gson.Gson;

ErrorInfo errorInfo = new ErrorInfo();
errorInfo.setCode(code);
errorInfo.setMessage(message);
Gson gson = new Gson();
String jsonStr = gson.toJson(errorInfo);
复制代码

JSONObject を使用する (推奨)

import org.json.JSONObject;

JSONObject jsonObject = new JSONObject();
String jsonStr = "";
try {
    jsonObject.put("code", code);
    jsonObject.put("message", message);
    jsonStr = jsonObject.toString();
} catch (JSONException e) {
    throw new RuntimeException(e);
}
复制代码

try catch を避けるために、HashMap で使用することを好みます

HashMap<String, String> map = new HashMap<>();
map.put("code", code);
map.put("message", message);
String jsonStr = new JSONObject(map).toString();
复制代码

なぜこのアプローチが推奨されるのですか?2つの理由は、1つ目は、前の2つの方法よりも使いやすいこと、2つ目は、Androidをネイティブで開発している場合、JSONライブラリを導入してフロントエンドとバックエンドの連携を実現し、データを作成する可能性が高いことです。 GSON と比較できるクラスjsonObject.getStringを使用するとはるかに便利ですが、当社は主に RN プロジェクトのように、小さな関数のライブラリを導入することは費用対効果が高くなく、ここで JSONObject が役立ちます。

要約する

对于 java 和 android,我肯定不如深耕于此的大佬了解,如果这篇文章有什么错误的地方,请指正,感激不尽。如果有更好的实现方式,也欢迎评论区分享。

おすすめ

転載: juejin.im/post/7229923818348199973