DataTable к Json с помощью jQuery

Таким образом, ключевым моментом здесь является оператор $ unwind , который преобразует массив из n элементов в n элементов с одним вложенным документом.

db.createView(
    "yourview",
    "yourcollection",
    [ { $unwind: "$books" } ]
)

Это даст вам документы в следующем формате:

{ author: "aa", books: { title: "a", pages: 100 } },
{ author: "aa", books: { title: "b", pages: 200 } },
{ author: "ab", books: { title: "c", pages: 80 } },
{ author: "ab", books: { title: "d", pages: 150 } }

РЕДАКТИРОВАТЬ: чтобы иметь ключи с точками в именах, вы можете запустить команду:

db.createView(
    "yourview",
    "yourcollection",
    [   
        { $unwind: "$books" },
        {
            $project: {
                author: 1,
                books2: {
                    $map: { 
                        input: { $objectToArray: "$books" },
                        as: "book",
                        in: {
                            k: { $concat: [ "books.", "$book.k" ] },
                            v: "$book.v"
                        }
                    }
                }
            }
        },
        {
            $replaceRoot: {
                newRoot: { $mergeObjects: [ { author: "$author" }, { $arrayToObject: "$books2" } ] }
            }
        } 
    ]
)

В основном он использует $ objectToArray и $ arrayToObject , чтобы «заставить» MongoDB возвращать поля с точками в именах. Выходы:

{ "author" : "aa", "books.title" : "a", "books.pages" : 100 }
{ "author" : "aa", "books.title" : "b", "books.pages" : 200 }
{ "author" : "ab", "books.title" : "c", "books.pages" : 80 }
{ "author" : "ab", "books.title" : "d", "books.pages" : 150 }

5
задан Kiquenet 28 January 2014 в 13:55
поделиться

6 ответов

В конце я решил использовать класс JavaScriptSerializer для преобразования DataTable в строку JSON. К сожалению, этот класс не работает с DataTable, таким образом, я преобразовал DataTable в список словарей, и передайте тот список классу JavaScriptSerializer. Требуется только несколько строк кода, и это хорошо работает.
Пример в VB.net:

    Public Function GetJson(ByVal dt As DataTable) As String

        Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim rows As New List(Of Dictionary(Of String, Object))
        Dim row As Dictionary(Of String, Object)

        For Each dr As DataRow In dt.Rows
            row = New Dictionary(Of String, Object)
            For Each col As DataColumn In dt.Columns
                row.Add(col.ColumnName, dr(col))
            Next
            rows.Add(row)
        Next
        Return serializer.Serialize(rows)
    End Function
8
ответ дан 18 December 2019 в 06:36
поделиться

Я должен признать, что чрезвычайно не удивлен - DataTable в основном нарушает большинство правил структурированных данных. Почему не просто проект из таблицы данных в типизированный объект? Связанный вопрос подошел ранее... или если Вы знаете схему DataTable просто сделайте преобразование в C#...

Вручную создание JSON могло бы работать, но существует много пограничных случаев для предотвращения; я скорее позволил существующей платформе обработать его, быть честной.

1
ответ дан 18 December 2019 в 06:36
поделиться

.Net 3.5 имеет JSONSerializer, который должен смочь обработать таблицу данных. Можно хотеть посмотреть к Вашим услугам код снова и попытаться заставить это использовать это. Кроме того, я соединил некоторый код, чтобы сделать это вручную в этом вопросе.

0
ответ дан 18 December 2019 в 06:36
поделиться

Json.NET имеет способность записать Наборы данных/Таблицы данных в JSON.

http://james.newtonking.com/archive/2008/09/06/dataset-datatable-serialization-with-json-net.aspx

4
ответ дан 18 December 2019 в 06:36
поделиться

Как Marc, я также не удивлен, что DataTable повреждает Ваш обмен webservice/json. Я хотел бы подтвердить Json.NET также.

Но если Вы решаете не пойти с ним, Вы все еще не должны создавать json вручную. Просто сделайте свой собственный минимизированный пользовательский класс со всеми свойствами, Вы нуждаетесь и затем возвращаете массив того класса. Необходимо будет, конечно, написать код для "преобразовывания" таблицы данных в новый класс. Я знаю, это могла быть большая запись кода, но это намного менее подвержено ошибкам затем попытка вручную сделать строку json.

0
ответ дан 18 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: