ラベル JSON の投稿を表示しています。 すべての投稿を表示
ラベル JSON の投稿を表示しています。 すべての投稿を表示

2020-07-03

クラスに格納されているデータをJSON形式に変換する(日本語文字列対応)

表題の通りです。肝は、
  • ensure_ascii=Falseを指定することで日本語対応
  • 正直、何をやっているのか不明(とりあえず動いた)
というところです。
(参考)


2014-12-25

GistのJSONデータからファイル情報を取ってくる(gson利用) ~キーがわからないJSONオブジェクトへのアクセス~

Gist APIを使ってJSON形式でGistのコードスニペットを取ってくるプログラムを書いてるんですが、filesの中身にある各スニペットの情報は、ファイル名がキーになっているので、その中身をどうやって取ってくるか?が悩みどころになります。
解決策は下記の通り。なお、JSONのアクセスにはgsonを利用してます。


2013-10-06

GWT: 楽天トラベルの検索結果(JSON)をParseするサンプル

GWTで楽天トラベルの検索結果(JSON)をParseするサンプルです。APIへのアクセスはサーバー側で行っていて、GWT-RPCでJSONデータを受け取ったという前提です。



GWT: 楽天市場APIの検索結果(JSON)をParseするサンプル

GWTで楽天市場の検索結果(JSON)をParseするサンプルです。APIへのアクセスはサーバー側で行っていて、GWT-RPCでJSONデータを受け取ったという前提です。



2013-05-14

GSON:GSONを使ってJSON形式の出力を直接書きだしてみる

Google はGSONと呼ばれるJSONのJavaライブラリを公開しています。これは、
  • JavaのデータクラスをJSON形式にして出力する
  • JSON形式のデータをJavaのデータクラスに格納する
という使い方が中心ですが、JSONのデータ構造とJavaのデータ構造が異なる時は、直接的にJSON形式でデータを書き出すことも可能です。下記は、サーブレットでの出力の例です。
わざわざJavaのデータクラスに一旦書き込むよりも上記のようにWriterに対して直接的に書きだすほうが手間がかからないでしょう。なお、書き方については、beginObjectとendObjectで囲まれた範囲が1つのオブジェクト(データ)に相当し、配列の箇所はbeginArrayとendArrayで囲まれた部分になります。

2011-10-25

[C#] JSONを利用する

C#には標準でJSONデータを読み書きするクラスが用意されています。このクラスを利用することでJSONデータをC#のクラスにマッピングすることができます。.NET4.0以降での対応のような気がしますので、プロジェクトの対象プラットフォームを確認しておきましょう(そうしないとライブラリを見つけることができませんので)。あとは以下のとおりです。

前準備
  • プロジェクトのプロパティにて対象プラットフォームが「.NET4.0Framework」となっているのを確認 
  • 参照設定(.NET)にて、System.Runtime.Serialization を追加
データクラスの作成
まず、jsonのデータを格納するためのデータクラスが必要です。今回は先日記事にしたgoo.glの短縮URLサービスが返すJSONを受け取るようにします。下記のようにデータコンストラクトを記述する所がポイントです。漏れのないように書いてください。
[DataContract]
    public class UrlInfo
    {
        [DataMember(Name = "kind")]
        public string Kind { get; set; }
        [DataMember(Name = "id")]
        public string ShortUrl { get; set; }
        [DataMember(Name = "longUrl")]
        public string LongUrl { get; set; }
    }
C#コード
関連するライブラリをインポート(using)するのは忘れないようにしてください。var宣言のところは実際のクラス宣言に置き換えてもいいかもしれません(未確認)。
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

var serializer = new DataContractJsonSerializer(typeof(UrlInfo));
var jsonBytes = Encoding.Unicode.GetBytes(surl);
var ms = new MemoryStream(jsonBytes);
var gURL = (UrlInfo)serializer.ReadObject(ms);
以上で、gURLにはjsonのデータが対応する各プロパティに入っていますので、gURL.ShortUrl等で呼び出すことができます。

2010-10-19

GWTでJSONを扱う ~JsonpRequestBuilderを利用する~

GWTでJSONPを扱う方法です。JsonpRequestBuilderを使うことで、JSONデータを自動的にクラスにマッピングしてくれます。以下のサンプルは次のJSONのデータを扱うことを前提としています。JSONPですから、外部サイトも参照可能です。
{
"name":"ochi",
"age":10,
"adress":
{"name":"Osaka"}
}
以下のプログラムは、クライアント側のプログラムです。Userクラスに自動的にマッピングしてくれます。
JsonpRequestBuilder jb = new JsonpRequestBuilder();
   jb.requestObject(
      "http://XXXXX.XXX.XXXX.json",
        new AsyncCallback<JsArray>() {
        public void onFailure(Throwable caught) {
           GWT.log("failure", caught);
        }
        public void onSuccess(JsArray<User> result) {
            StringBuilder sb = new StringBuilder();
            Window.alert("Success");
            for (int i = 0; i < result.length(); i++) {
               sb.append(result.get(i).getName());
            }
            resultArea.setValue(sb.toString());
        }
   });
ここで、注意しなければならないのは、クラスの宣言方法です。下記のように、JSNI形式でなければなりません。
import com.google.gwt.core.client.* ;
import java.util.* ;

final public class User extends JavaScriptObject {

  protected User(){
  }

  public native java.lang.Long getId()/*-{
     return this['id'];
  }-*/;

  public native Address getAddress()/*-{
     return this['address'];
  }-*/;

  public native java.lang.String getName()/*-{
     return this['name'];
  }-*/;

  final static public class Address extends JavaScriptObject {

    protected Address(){
    }

    public native java.lang.String getName()/*-{
       return this['name'];
    }-*/;

  }
}
このようなクラスを記述するのが手間ですが、実は作成を支援してくれるサイトがあります。
 JSONの雛形データをいれるとこのフォーマットに変換してくれるとても素敵なサイトです。(こういう世のためになるサイトを作りたいですね)

(追記:2010/10/22)
***.gwt.xml ファイルには
<inherits name='com.google.gwt.jsonp.Jsonp' /> 
の記述が必要です。

GWTでJSONを扱う ~JSONParserを利用する~

GWTのクライアント側で、JSONのパースを行う方法です(この方法はあまり使われないかもしれません)。
下記は、testjsonという文字列にJSON形式のデータが入っているという前提です。
最終的にJSONStringに変換してその値を取り出しています。なんかまどろっこしいですよね。

なお***.gwt.xml ファイルには
< inherits name='com.google.gwt.json.JSON' />
の記述が必要です。