web-dev-qa-db-ja.com

JavaでjsonStringをJSONObjectに変換する方法

jsonStringという文字列変数があります。

{"phonetype":"N95","cat":"WP"}

それではJSONオブジェクトに変換したいと思います。私はグーグルでもっと検索したが期待される答えを得られなかった….

353

org.json libraryを使用します。

JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
585
dogbane

まだ答えを探している人には:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
140
Mappan

google-gsonを使うことができます。詳細:

オブジェクトの例

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}

(シリアル化)

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 
==> json is {"value1":1,"value2":"abc"}

循環参照を使用してオブジェクトを直列化することはできません。無限再帰が発生するためです。

(逆シリアル化)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
==> obj2 is just like obj

Gsonの別の例:

Gsonは習得が簡単で実装が簡単です。次の2つの方法を知っておく必要があります。

- > toJson() - JavaオブジェクトをJSONフォーマットに変換する

- > fromJson() - JSONをJavaオブジェクトに変換する

import com.google.gson.Gson;

public class TestObjectToJson {
  private int data1 = 100;
  private String data2 = "hello";

  public static void main(String[] args) {
      TestObjectToJson obj = new TestObjectToJson();
      Gson gson = new Gson();

      //convert Java object to JSON format
      String json = gson.toJson(obj);

      System.out.println(json);
  }

}

出力

{"data1":100,"data2":"hello"}

リソース:

Google Gson Projectのホームページ

Gsonユーザーガイド

41
kamaci

JSONホームページ からリンクされたさまざまなJava JSONシリアライザおよびデシリアライザがあります。

これを書いている時点では、これらの20があります。

...しかしもちろんリストは変更することができます。

32
T.J. Crowder

Java 7ソリューション

import javax.json.*;

...

String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

;

23
RSG

これにはgoogle-gsonを使用するのが好きですが、それはJSONObjectを直接操作する必要がないためです。

その場合私はあなたのJSONオブジェクトのプロパティに対応するクラスがあるでしょう

class Phone {
 public String phonetype;
 public String cat;
}


...
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
Gson gson = new Gson();
Phone fooFromJson = gson.fromJson(jsonString, Phone.class);
...

しかし、私はあなたの質問がもっと似ていると思います、どうやってJSON文字列からの実際のJSONObjectオブジェクトになってしまうのですか。

私はgoogle-json APIを見ていましたが、org.jsonのapiほど簡単なものを見つけることができませんでした。おそらく、必要最低限​​のJSONObjectを使用する必要がある場合は、これを使用したいと思います。

http://www.json.org/javadoc/org/json/JSONObject.html

Org.json.JSONObject(別のまったく異なるAPI)を使用したい場合は、次のようにします。

JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));

Google-gsonの長所は、JSONObjectを扱う必要がないことです。あなたはただjsonをつかみ、デシリアライズしたいクラスを渡し、そしてあなたのクラス属性はJSONにマッチするでしょう、しかし、ここでもまた、誰もが独自の要件を持っています。 JSON生成側では動的すぎる可能性があるため、逆シリアル化側です。その場合はjson.orgを使用してください。

10
Gubatron

StringJSONObjectに変換するには、StringインスタンスをJSONObjectのコンストラクタに渡すだけです。

例えば:

JSONObject jsonObj = new JSONObject("your string");
10
Charu

org.jsonをインポートする必要があります

JSONObject jsonObj = null;
        try {
            jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
        } catch (JSONException e) {
            e.printStackTrace();
        }
8
Cabezas

JSONへの文字列 com.fasterxml.jackson.databindJacksonを使用する:

Json-stringが次のように表現されているとします。jsonString = {"phonetype": "N95"、 "cat": "WP"}

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * Simple code exmpl
 */
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
String phoneType = node.get("phonetype").asText();
String cat = node.get("cat").asText();
5
Yugerten

Generic Json ParsingにはfastxmlのJsonNodeを使用してください。内部的にすべての入力に対してキー値のマップを作成します。

例:

private void test(@RequestBody JsonNode node)

入力文字列:

{"a":"b","c":"d"}
3
Vishnu

/を使用している場合 http://json-lib.sourceforge.net (net.sf.json.JSONObject)

それはとても簡単です:

String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);

または

JSONObject json = JSONSerializer.toJSON(myJsonString);

次にjson.getString(param)、json.getInt(param)などで値を取得します。

3
Thero

文字列をjsonに変換することは、jsonのようなものです。 {"音声タイプ": "N95"、 "猫": "WP"}

String Data=response.getEntity().getText().toString(); // reading the string value 
JSONObject json = (JSONObject) new JSONParser().parse(Data);
String x=(String) json.get("phonetype");
System.out.println("Check Data"+x);
String y=(String) json.get("cat");
System.out.println("Check Data"+y);
2

外部ライブラリを使用する必要はありません。

このクラスを代わりに使用することができます:) (偶数リスト、ネストされたリスト、jsonを処理します)

public class Utility {

    public static Map<String, Object> jsonToMap(Object json) throws JSONException {

        if(json instanceof JSONObject)
            return _jsonToMap_((JSONObject)json) ;

        else if (json instanceof String)
        {
            JSONObject jsonObject = new JSONObject((String)json) ;
            return _jsonToMap_(jsonObject) ;
        }
        return null ;
    }


   private static Map<String, Object> _jsonToMap_(JSONObject json) throws JSONException {
        Map<String, Object> retMap = new HashMap<String, Object>();

        if(json != JSONObject.NULL) {
            retMap = toMap(json);
        }
        return retMap;
    }


    private static Map<String, Object> toMap(JSONObject object) throws JSONException {
        Map<String, Object> map = new HashMap<String, Object>();

        Iterator<String> keysItr = object.keys();
        while(keysItr.hasNext()) {
            String key = keysItr.next();
            Object value = object.get(key);

            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            map.put(key, value);
        }
        return map;
    }


    public static List<Object> toList(JSONArray array) throws JSONException {
        List<Object> list = new ArrayList<Object>();
        for(int i = 0; i < array.length(); i++) {
            Object value = array.get(i);
            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            list.add(value);
        }
        return list;
    }
}

JSON文字列をハッシュマップに変換するには を使います。

HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
1
Natesh bhat

org.json を使用する

JSON形式のテキストを含むStringがある場合は、次の手順でJSONオブジェクトを取得できます。

String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
    try {
        jsonObj = new JSONObject(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }

今度はふりがなにアクセスする

Sysout.out.println(jsonObject.getString("phonetype"));
0
Azhar Zafar

GSONがインターフェースを逆シリアル化すると、以下のような例外が発生します。

"Java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."

逆シリアル化します。 GSONは、そのオブジェクトに対してどのオブジェクトをインスタンス化する必要があるのか​​わかりません。

これはどういうわけか解決されています ここ

しかし FlexJSON は本質的にこの解決策を持っています。時間をシリアル化しながら、それは以下のようにJSONの一部としてクラス名を追加しています。

{
    "HTTPStatus": "OK",
    "class": "com.XXX.YYY.HTTPViewResponse",
    "code": null,
    "outputContext": {
        "class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
        "eligible": true
    }
}

そのため、JSONは厄介になります。しかし、GSONで要求されているInstanceCreatorを書く必要はありません。

0

JSON単一オブジェクトをリストに設定する

"locations":{

}

List<Location>

つかいます

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

jackson.mapper-asl-1.9.7.jar

0
user3012570