0

私は安らかな Web サービスと、Web サービスを消費する Java クライアントを構築しています。クライアントに送信されるサーバーからの応答は、json 形式です。json 文字列の属性とデータを配列に格納したいので、データを使用してクライアント操作を構築できます。私が製品のコレクションを持っているとしましょう。残りのサーバーからの出力は次の形式であり、単純に文字列変数に入れています。

String output="{"product":[{"code":"7","name":"book","value":"4.0"},{"code":"3","name":"pen","value":"4.5"},{"code":"9","name":"pencil","value":"5.5"}]}"

json オブジェクトを Product タイプの Java オブジェクトに変換しようとしました。

Gson gson = new GsonBuilder().serializeNulls().create();
Product product= gson.fromJson(output,Product.class);
System.out.println(product);

出力は次のとおりです。

product:[product:null,name:book,code:7,value:4,000000,       
product:null,name:pen,code:3,value:4,500000,  
product:null,name:pencil,code:9,value:5,500000],name:null,code:null,value:null

そして私が

System.out.println(product.product);

出力は次のとおりです。

[product:null,name:book,code:7,value:4,000000,     
product:null,name:pen,code:3,value:4,500000,   
product:null,name:pencil,code:9,value:5,500000]

最初の質問: null 値が表示される理由がわかりません。これを修正する方法が見つかりません。

2 番目の質問: 私は何日も探し回っていますが、これらのデータを配列またはリストに保存する方法が本当に見つかりません。それらを Java Products オブジェクトに保存したくありません。私がやりたいことは、すべての属性をまとめることです。たとえば、すべての値、名前、またはすべての製品の配列です。

Something like this I have in mind:

String[] names=["book","pen","pencil"];
Integer[] codes=[7,3,9];
Double[] values=[4.0,4.5,5.5];

3 番目の質問: これらの操作 (合計値の計算など) をサーバー側で行う必要がありますか? これは良い方法でしょうか?

4 番目の質問: クライアントで Products クラスを複製する必要がありますか? そのため、CRUD 以外の操作は絶対にクライアント側で行う必要があるかどうかはわかりません。

製品クラス:

class Product  {

public String name;
public Integer code;
public Double value;
public List<Product> product;


public String getName()
{
    return name;
}

public void setName(String name)
{
    this.name=name;
}

public Integer getCode()
{
    return code;
}

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

public Double getValue()
{
    return value;
}

public void setValue(Double value)
{
    this.value=value;
}
public List<Product> getProduct() 
{ 
    return product; 
}
 public void setProduct(List<Product> order) 
 { 
     this.product = product; 
 }
@Override
public String toString() {
 return    String.format("product:%s,name:%s,code:%d,value:%f",product,name,code,value);
      }
}

最も簡単な方法と思われるため、Gson ライブラリを使用しています。

4

1 に答える 1

1

まず、「null」値の出現: おそらく toString() メソッドの動作方法が原因です。それが何をするかを確認してください。null を文字列に追加すると、リテラルの「null」として出力されます。第二に、製品を製品オブジェクトとしてクライアントに保存したくないのはなぜですか? それがオブジェクト指向プログラミングのすべてであり、一緒に属するものをまとめます。それらをすべてコレクションに入れ、そのコレクションを反復処理して、必要なすべての価格、名前、およびその他のものを取得するか、製品で必要なことを行うためのメソッドを定義するだけです。クライアントに Product クラスを持たない正当な理由はありません。または、クラスを含むクライアントとサーバーの共有プロジェクトを使用して、同期を維持することを心配する必要なく、両方で使用できます。

JSON 文字列にはリストが含まれていますが、単一のオブジェクトを取得しようとしています。これを試して:

final List<Product> products = new Gson().fromJson(jsonString,
new TypeToken<Collection<Product>>() {
            }.getType());

次に、たとえば次のように、結果を反復処理できるはずです。

double totalValue=0; 
for (Product product:products) {
    totalValue+=product.getValue();
}
于 2013-01-12T19:45:42.170 に答える