私は文字列変数と呼ばれていjsonString
ます:
{"phonetype":"N95","cat":"WP"}
それをJSONオブジェクトに変換したいと思います。Googleでさらに検索しましたが、期待する回答が得られませんでした...
私は文字列変数と呼ばれていjsonString
ます:
{"phonetype":"N95","cat":"WP"}
それをJSONオブジェクトに変換したいと思います。Googleでさらに検索しましたが、期待する回答が得られませんでした...
回答:
org.jsonライブラリの使用:
try {
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
Log.d("Error", err.toString());
}
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
まだ答えを探している人には:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
import org.json.simple.JSONObject
parser.parse(
、try-catchまたはthrowsを要求します。ただし、いずれかを追加すると、Maven依存関係にjson-simpleがあり、プロジェクトのライブラリに明確に表示されている場合でも、Unhandled exception type ParseException
ParseExceptionに対してエラーまたはNoClassDefFoundエラーが発生しorg.json.simple.parser
ます。
使用できます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"}
リソース:
Java 7ソリューション
import javax.json.*;
...
String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
;
私はこれに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を使用してください。
JSONの文字列を使用しJackson
てcom.fasterxml.jackson.databind
:
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();
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)などを使用して値を取得します。
文字列をjsonに変換すると、文字列はjsonのようになります。{"phonetype": "N95"、 "cat": "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);
外部ライブラリを使用する必要はありません。
代わりにこのクラスを使用できます:)(リスト、ネストされたリスト、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(
Codehaus Jackson-私は2012年以来、RESTful WebサービスとJUnitテストでこの素晴らしいAPIを使用しています。APIを使用すると、次のことができます。
(1)JSON文字列をJava Beanに変換する
public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}
(2)JSON文字列をJSONオブジェクトに変換(JsonNode)
public static JsonNode stringToJSONObject(String jsonString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readTree(jsonString);
}
//Example:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JsonNode jsonNode = stringToJSONObject(jsonString);
Assert.assertEquals("Phonetype value not legit!", "N95", jsonNode.get("phonetype").getTextValue());
Assert.assertEquals("Cat value is tragic!", "WP", jsonNode.get("cat").getTextValue());
(3)Java BeanをJSON文字列に変換する
public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readValue(JSONString, beanClass);
}
REFS:
JsonNode API -JsonNodeオブジェクトの値を使用、ナビゲート、解析、評価する方法
チュートリアル -Jacksonを使用してJSON文字列をJsonNodeに変換する簡単なチュートリアル
インターフェースをデシリアライズする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は扱いにくいものになります。しかしInstanceCreator
、GSONで必要な書き込みは必要ありません。
JSON形式のテキストを含む文字列がある場合は、次の手順でJSONオブジェクトを取得できます。
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}
次に、phonetypeにアクセスします
Sysout.out.println(jsonObject.getString("phonetype"));
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
org.json.simple.JSONObjectを使用して文字列をJsonオブジェクトに変換する
private static JSONObject createJSONObject(String jsonString){
JSONObject jsonObject=new JSONObject();
JSONParser jsonParser=new JSONParser();
if ((jsonString != null) && !(jsonString.isEmpty())) {
try {
jsonObject=(JSONObject) jsonParser.parse(jsonString);
} catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}
}
return jsonObject;
}
を使用してより簡単な方法でより良い行く org.json
lib。以下のように非常に単純なアプローチを実行してください:
JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");
今 obj
が、JSONObject
それぞれの文字列を変換した形式です。これは、名前と値のペアがある場合に当てはまります。
文字列の場合、のコンストラクタに直接渡すことができますJSONObject
。有効な場合はjson String
、それ以外の場合は例外をスローします。
user.put("email", "someemail@mail.com")
未処理の例外をトリガーします。
try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}