Описатель ошибки: Имя элемента недопустимо? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь вставить объемный строковый документ JSON в MongoDB.но некоторые документы выглядят как в формате JSON

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Несмотря на то, что mongodb допускает это в ядре базы данных и в оболочке mongo:

> db.test.insert( { "text.this" : true } )
WriteResult({ "nInserted" : 1 })
> db.test.find()
{ "_id" : ObjectId("5b0f2095e1bd0eaac6294dcf"), "text.this" : true }
>

Я настоятельно рекомендую это сделать, так как запросы будут кошмаром.

Однако, еслиу вас есть строка JSON в C #, я бы использовал что-то вроде Json.NET и разделил . на внедренный документ:

string json = "{ \"application.data\":\"process\" }";
var jObject = JsonConvert.DeserializeObject<JObject>(json);

var jWithDot = jObject.Properties().Where(x => x.Name.Contains(".")).ToList();
foreach (var j in jWithDot)
{
    var names = j.Name.Split(".");

    var jProperty = new JProperty(names[0], new JObject(new JProperty(names[1], j.Value)));
    j.Replace(jProperty);
}

// { "application": { "data": "process" } }
var newJson = jObject.ToString();

Затем вы можете разделить это в MongoDB как обычно

var mongoClient = new MongoClient();
var mongoDatabase = mongoClient.GetDatabase("test");
var collection = mongoDatabase.GetCollection<BsonDocument>("test");

collection.InsertOne(BsonDocument.Parse(newJson));

После выполнения вы увидите в оболочке следующее:

> db.test.find()
{ "_id" : ObjectId("5b0f236605267300e0911e43"), "application" : { "data" : "process" } }
0 голосов
/ 31 мая 2018
string json = "{ "application.data":"process" }";

не является допустимой строкой JSON.Вторые двойные кавычки закрывают строку, и после нее нет оператора конкатенации.Если вам нужны двойные кавычки для application.data и процесса (полагаю, что вам нужно), используйте разделитель обратной косой черты.

var jsonString = JSON.parse("{ \"application.data\":\"process\" }");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...