Как представить зачеркивание в JSON

Я разрабатываю приложение, которое пользователь отправляет текст на сервер. Затем сервер меняет текст и отвечает исходным текстом и измененным текстом.

Как представить удаленный текст в JSON. (зачеркнутый)

Например так:

введите здесь описание изображения

Я думал о чем-то подобном:

Массив, содержащий весь текст, разделенный на то, где должен содержаться штрих, а где нет:

 data={
   textBefore:'this is the first world. this is the second world',
   textAfter:'this is first world. this is second world,
  changes:[
    {'nostroke':'this is th'},
    {'stroe':'efirst world'},
    {'nostroke':'in the third world'}
  ]
}

У вас есть идея получше?

Или вот так:

data={
  textBefore:'this is the first world. this is the second world',
  textAfter:'this is first world. this is second world,
  changes:[
    {from:2,to:22,text:'repace from char 2 to char 22 with this text'},
    {from:2,to:4} // This will only delete 2 chars
    {from:2,to:2,text:'This will only append this text without replae},
  ]

person Aminadav Glickshtein    schedule 15.02.2016    source источник
comment
JSON поддерживает строки, объекты, массивы, логические значения и несколько других типов данных. В нем нет ничего встроенного для описания этого, поэтому ответ будет «Как вам угодно» и зависит от мнения.   -  person Quentin    schedule 15.02.2016
comment
Я могу спросить, как представить что-то в таблицах, как представить что-то на диаграмме UML. Поэтому я спрашиваю, как преобразовать данные реального мира в формат JSON.   -  person Aminadav Glickshtein    schedule 15.02.2016
comment
Являются ли Then the server <s>change</s> the text реальными данными?   -  person F. Hauri    schedule 15.02.2016
comment
Ваш вопрос может быть хорошим вопросом, но вы должны развиваться. Добавьте некоторые противоречия и описания.   -  person F. Hauri    schedule 15.02.2016


Ответы (4)


Я проверил, как google-diff-match-patch представляет его в массиве, и вот результат. Разница между original text и original txet:

var x=new diff_match_patch().diff_main('original text','original txet')
JSON.stringify(x)
//Result
"[[0,"original t"],[-1,"e"],[0,"x"],[1,"e"],[0,"t"]]"

Объяснять:

  • 0 Два текста имеют это (одинаковое)
  • -1 только в первом тексте (удалено)
  • 1 только во втором тексте (дополнение)

Исходный код:

https://code.google.com/archive/p/google-diff-match-patch/wikis/API.wiki

Демо:

https://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_diff.html

Спасибо @Andriy за ссылки

person Aminadav Glickshtein    schedule 15.02.2016

Вы можете использовать html-тег <strike></strike> в ответе вашего сервера (предположим, вы замените слово duper на awesome):

{
    "old":"My super duper text",
    "new":"My super <strike>duper</strike> awesome text"
}

Тогда вам придется интерпретировать, что в вашем клиентском коде есть html.

person cl3m    schedule 15.02.2016

Вы можете создать свою собственную схему, как хотите...

Может быть:

message: {
    text: 'Then the server change the text',
    strikeAt: 16,
    strikeLen: 6,
    otherFunProperty: 'yNot'
}

или еще лучше:

message: {
    text: 'Then the server change the text',
    strikes: [ [ 16, 6 ] ],
    bolds: [],
    otherFunProperty: 'yNot'
}

Но это всего лишь один способ...

Может быть, не более подходит для вашего конкретного случая.

Если вам нужно сохранить какую-то историю, вы можете взглянуть на команду оболочки diff -u (используется для команды patch):

--- stringBefore    2016-02-15 11:49:04.493941099 +0100
+++ stringAfter
@@ -16,0 +17,3 @@
+<s>
@@ -22,0 +26,4 @@
+</s>
person F. Hauri    schedule 15.02.2016
comment
Кто это минусует и почему?? - person F. Hauri; 15.02.2016

Вы должны найти удаленный текст на внешнем интерфейсе в обработчике успеха AJAX (я предполагаю, что вы отправляете XMLHttpRequests) или на внутреннем интерфейсе (после формирования новых и старых текстовых строк, но до создания ответа JSON), заключая удаленные слова в < тег href="http://www.w3schools.com/tags/tag_strike.asp" rel="nofollow noreferrer">strike.

Найти различия между start и end жалом может быть довольно сложно. Однако я рекомендую вам проверить существующие вопросы SO:

Кроме того, если вы можете дать некоторое представление о том, как бэкэнд работает со строками, отправленными на сервер, может быть проще выполнить такую ​​логику на сервере...

person Andriy Ivaneyko    schedule 15.02.2016