1

我目前正在使用以下代码:

TSerializer serializer = new TSerializer(
        new TJSONProtocol.Factory());

Log.print("[ \"rec\","+list.size()+",");
for (int i = 0; i < list.size(); i++) {
    if(i!=0) Log.print(",");
    Log.print(serializer
            .toString((TBase) (list.get(i))));
}

该列表是一个ArrayList<RFileMetadata>()数据结构,例如,我得到以下输出:

[
    "rec",
    3,
    {
        "1": {
            "str": "allalla"
        },
        "2": {
            "i64": 91299230
        }
    },
    {
        "1": {
            "str": "allalla"
        },
        "2": {
            "i64": 91299230
        }
    },
    {
        "1": {
            "str": "allalla"
        },
        "2": {
            "i64": 91299230
        }
    }
]

但是我怎么能直接输出呢。

我在问一个不使用 for 循环的代码来手动打印["rec",3,....]等等。我不应该生成,程序应该为我生成它。

4

1 回答 1

0

您不必显式创建一个 json 字符串然后对其进行字符串化。Apache thrift 提供了一种更好的方法来做到这一点。

如果您浏览您的代码,FileStore它在我的本地节俭中被命名为相同。

List<RFileMetadata> struct = client.listOwnedFiles(userName);

jsonProtocol.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.size()));

   for (RFileMetadata _iter3 : struct) {
         _iter3.write(jsonProtocol);
    }

jsonProtocol.writeListEnd();

如果您探索更多 thrift 代码,您将更容易理解 thrift 的实际工作原理。

于 2015-10-15T22:31:44.090 回答