2

Json.net を使用JsonTextWriterして、Web サービスから JSON データ オブジェクトを作成しています。私は持っている:

Dim sb As New StringBuilder()
Dim sw As New StringWriter(sb)
Dim writer As JsonWriter = New JsonTextWriter(sw)

If ds.Tables(0).Rows.Count > 0 Then

    writer.WriteStartObject()
    writer.WritePropertyName("authors")
    writer.WriteStartArray()
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
        writer.WriteStartObject()
        writer.WritePropertyName("key")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("CoAuthorID"))
        writer.WritePropertyName("text")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("CoAuthorName").ToString)
        writer.WritePropertyName("program")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("program").ToString)
        writer.WritePropertyName("number")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("n").ToString)
        writer.WriteEndObject()
    Next
    writer.WriteEndArray()
    writer.WriteEndObject()
End If

しかし今、次のような2番目のテーブルを追加したい

writer.WriteStartObject()
writer.WritePropertyName("pubs")
writer.WriteStartArray()
For i As Integer = 0 To ds.Tables(1).Rows.Count - 1
    writer.WriteStartObject()
    writer.WritePropertyName("pmid")
    writer.WriteValue(ds.Tables(1).Rows(i).Item("pmid"))
    writer.WritePropertyName("text")
    writer.WriteValue(ds.Tables(1).Rows(i).Item("Reference").ToString)
    writer.WriteEndObject()
Next
writer.WriteEndArray()
writer.WriteEndObject()

JSONData.authorsやなどのクライアント側のデータを操作できるようにしたいJSONData.pubs。1 つのデータ テーブルで作業する場合はすべて問題ありませんが、teo を組み合わせるとデータを読み取ることができません。2 つの JSON オブジェクトの間にカンマがないようです。手動で追加すると、チョークします。2 つのデータテーブルの間に 1 行のコードが欠けていると「仮定」しますが、それが何であるかはわかりません。どんな助けでも大歓迎です。何か関係があるのではないかと思いますがWriteStartConstructor、よくわかりません。

4

1 に答える 1

2

配列pubsは、新しいオブジェクトではなく、ルート オブジェクトのプロパティである必要があります。コードをそのまま追加する場合は、基本的に次のような JSON を記述します。

{"著者":[...]}{"パブ":[...}}

お気づきかもしれませんが、それぞれauthorspubsプロパティを持つ 2 つの異なるオブジェクトがあります。そのように、有効な JSON 文字列ではありません。

おそらく、次のように JSON を構築する必要があります。

writer.WriteStartObject()
If ds.Tables(0).Rows.Count > 0 Then
    writer.WritePropertyName("authors")
    writer.WriteStartArray()
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
        writer.WriteStartObject()
        writer.WritePropertyName("key")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("CoAuthorID"))
        writer.WritePropertyName("text")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("CoAuthorName").ToString)
        writer.WritePropertyName("program")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("program").ToString)
        writer.WritePropertyName("number")
        writer.WriteValue(ds.Tables(0).Rows(i).Item("n").ToString)
        writer.WriteEndObject()
    Next
    writer.WriteEndArray()
End If
If ds.Tables(1).Rows.Count > 0 Then
    writer.WritePropertyName("pubs")
    writer.WriteStartArray()
    For i As Integer = 0 To ds.Tables(1).Rows.Count - 1
        writer.WriteStartObject()
        writer.WritePropertyName("pmid")
        writer.WriteValue(ds.Tables(1).Rows(i).Item("pmid"))
        writer.WritePropertyName("text")
        writer.WriteValue(ds.Tables(1).Rows(i).Item("Reference").ToString)
        writer.WriteEndObject()
    Next
    writer.WriteEndArray()
End If
writer.WriteEndObject()
于 2013-06-13T16:34:52.527 に答える