{"id":25230,"date":"2020-11-05T15:24:27","date_gmt":"2020-11-05T08:24:27","guid":{"rendered":"https:\/\/tom.ji42.com\/?p=25230"},"modified":"2020-11-05T15:24:27","modified_gmt":"2020-11-05T08:24:27","slug":"vfp-data-types","status":"publish","type":"post","link":"https:\/\/tom.tomwork.net\/?p=25230","title":{"rendered":"VFP Data Types"},"content":{"rendered":"<p>VFP has two realms that concern datatypes: the DBF table, and the types of variables and .value property. There are 3 differences: objects, numerics, and chars. There is no Object type of DBF field, and DBF has different kinds of numerics: integer, float, currency, etc. as where numeric variables are all stored in floating point. VFP automagically converts back and forth when it moves data between memory and disk. As far as I know this should not concern anyone &#8211; it has been this way for years, and no one has ever suggested that there are any pitfalls to be aware of.<\/p>\n<p><img decoding=\"async\" class=\"timeflag\" title=\"New 2001.01.15\" src=\"http:\/\/fox.wikis.com\/cal_sm.png\" alt=\"\" \/>\u00a0<span style=\"color: blue;\">Moving memos to memory does the same thing, it ends up as a character variable type. &#8212;\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~MikeHelland\">Mike Helland<\/a><br \/>\n<\/span><br \/>\nOk, I got bit: Currency&#8217;s don&#8217;t play nice with\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~PadL\">Pad L<\/a>() &#8211; you have to use\u00a0<a class=\"createtopiclink\" title=\"Create a topic for this\" href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Edit~MtoN\">MtoN<\/a>().\u00a0<small>Thanks Bill<br \/>\n<\/small><!--more--><\/p>\n<hr \/>\n<p>DBF\u00a0<a class=\"createtopiclink\" title=\"Create a topic for this\" href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Edit~DataTypes\">DataTypes<\/a>:<br \/>\nFrom the VFP help topic\u00a0<span style=\"color: blue;\"><b>Data and Field Types<\/b><\/span><\/p>\n<table class=\"bordertable\" width=\"100%\">\n<tbody>\n<tr>\n<th>Data type<\/th>\n<th>Description<\/th>\n<th>Size (bytes)<\/th>\n<th>Range<\/th>\n<\/tr>\n<tr>\n<td>Character<\/td>\n<td>Any text<\/td>\n<td>1 to 254<\/td>\n<td>Any characters<\/td>\n<\/tr>\n<tr>\n<td><img decoding=\"async\" class=\"timeflag\" title=\"New 2005.09.24\" src=\"http:\/\/fox.wikis.com\/cal_sm.png\" alt=\"\" \/>\u00a0Varchar<\/td>\n<td>Any text<\/td>\n<td>1 to 254<\/td>\n<td>Any characters<\/td>\n<\/tr>\n<tr>\n<td><img decoding=\"async\" class=\"timeflag\" title=\"New 2005.09.24\" src=\"http:\/\/fox.wikis.com\/cal_sm.png\" alt=\"\" \/>\u00a0Varbinary<\/td>\n<td>Binary data<\/td>\n<td>1 to 254<\/td>\n<td>Binary data<\/td>\n<\/tr>\n<tr>\n<td>Date<\/td>\n<td>Chronological data consisting of month, year, and day<\/td>\n<td>8<\/td>\n<td>When using strict date formats, {^0001-01-01}, January 1st, 1 A.D to {^9999-12-31}, December 31st, 9999 A.D.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~DateTime\">Date Time<\/a><\/td>\n<td>Chronological data consisting of month, year, day, and time<\/td>\n<td>8<\/td>\n<td>{^0001-01-01}, January 1st, 1 A.D to {^9999-12-31}, December 31st, 9999 A.D., plus 00:00:00 a.m. to 11:59:59 p.m.<\/td>\n<\/tr>\n<tr>\n<td>Numeric<\/td>\n<td>Integers or fractions<\/td>\n<td>1 to 20<\/td>\n<td>&#8211; .9999999999E+19 to .9999999999E+20<\/td>\n<\/tr>\n<tr>\n<td>Float<\/td>\n<td>Integers or fractions<\/td>\n<td>1 to 20<\/td>\n<td>&#8211; .9999999999E+19 to .9999999999E+20<\/td>\n<\/tr>\n<tr>\n<td>Integer<\/td>\n<td>Integers<\/td>\n<td>4<\/td>\n<td>-2,147,483,647 to 2,147,483,647<\/td>\n<\/tr>\n<tr>\n<td>Double<\/td>\n<td><\/td>\n<td>1 to 20<\/td>\n<td>&#8211; .9999999999E+19 to .9999999999E+20<\/td>\n<\/tr>\n<tr>\n<td>Currency<\/td>\n<td>Monetary amounts<\/td>\n<td>8 bytes<\/td>\n<td>&#8211; 922337203685477.5807 to 922337203685477.5807<\/td>\n<\/tr>\n<tr>\n<td>Logical<\/td>\n<td>Boolean value of true or false<\/td>\n<td>1 byte<\/td>\n<td>True (.T.) or False (.F.)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Memo\">Memo<\/a><\/td>\n<td>Any text<\/td>\n<td>In the DBF 4 bytes\/memo<br \/>\nIn the FPT allocated in chuncks based on SET BLOCKSIZE<\/td>\n<td>Any characters<\/td>\n<\/tr>\n<tr>\n<td>General<\/td>\n<td>data and host program<\/td>\n<td>In the DBF 4 bytes\/memo<br \/>\nIn the FPT allocated in chuncks based on SET BLOCKSIZE<\/td>\n<td>OLE Documents<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Blob\">Blob<\/a><\/td>\n<td>Binary data<\/td>\n<td>In the DBF 4 bytes\/memo<br \/>\nIn the FPT allocated in chuncks based on SET BLOCKSIZE<\/td>\n<td>Binary data<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<p><b>Variant<\/b>\u00a0All\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~FoxPro\">FoxPro<\/a>\u00a0memory variables are basically variant. They can contain any of the\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~VisualFoxPro\">Visual FoxPro<\/a>\u00a0data types and the null value. Once a value is stored to a variant, the variant assumes the data type of the data it contains.<\/p>\n<hr \/>\n<p><b>Nulls<\/b><\/p>\n<p>Type() and\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~VarType\">Var Type<\/a>() handle NULLs in a different way. Here&#8217;s a demonstration (which is quicker than words!):<\/p>\n<pre><code>\r\n?Type('m.test')   &amp;&amp; Prints: U\r\n?VarType(m.test)  &amp;&amp; Prints: U  (and DOESN'T give a var not found error!!!)\r\nm.test = .null.\r\n?Type('m.test')   &amp;&amp; Prints: L  (Like an uninitialized parameter)\r\n?VarType(m.test)  &amp;&amp; Prints: X\r\nm.test = 1\r\n?Type('m.test')   &amp;&amp; Prints: N\r\n?VarType(m.test)  &amp;&amp; Prints: N\r\nm.test = .null.\r\n?Type('m.test')   &amp;&amp; Prints: N  (It remembers!)\r\n?VarType(m.test)  &amp;&amp; Prints: X\r\n\r\ncreate cursor tester ( Fld1 N(5) NULL )\r\nappend blank\r\nreplace fld1 with .NULL.\r\n?type('tester.fld1')   &amp;&amp; Prints: N\r\n?vartype(tester.fld1)  &amp;&amp; Prints: X\r\nscatter memvar\r\n?type('m.fld1')        &amp;&amp; Prints: N\r\n?vartype(m.fld1)       &amp;&amp; Prints: X\r\n\r\n<\/code><\/pre>\n<p>The conclusion is, you CAN use\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~VarType\">Var Type<\/a>() even if you&#8217;re not sure of a variable&#8217;s existence, PLUS it protects you from .NULL. variables that had had a value before they were null, but it&#8217;s no help in determining the real type of a field containing .NULL.<\/p>\n<p><span style=\"color: blue;\">VarType() is fine for non-existant variables, but it errors when checking the type of a property of a non-existant object. For example;<br \/>\n<\/span><\/p>\n<pre>loObj = NULL\r\n? TYPE(\"loObj.Name\") &amp;&amp; Returns U as undefined\r\n? VarType(loObj.Name) &amp;&amp; Errors with variable not found\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><b>Double Field Type<\/b><\/p>\n<p>Use the Double data type instead of Numeric when you need more accuracy, a fixed amount of storage in your table, or true floating-point values. For more information about the specifications for this type, see the tables of Data and Field Types.<\/p>\n<p>In a table, unlike Numeric data, you determine the position of the decimal point when you enter the value.<\/p>\n<hr \/>\n<p><b>Numeric and Float<\/b>\u00a0data types are identical. The only difference is the spelling of the name of the data type. The Float type was introduced to Fox for compatibility to dBase IV many yearas ago. IN VFP the float type is no different than the numeric type.<br \/>\nHmmm, I see it is stored in plain ascii text, just like a Numeric (like you said). So it isn&#8217;t a floating point at all.<br \/>\n<span style=\"color: blue;\">No it is not floating point. It was added so that Fox would not choke on the Float type in a DBF created with dBASE IV. dBASE IV&#8217;s Float is a floating point number, but Fox&#8217;s is not.<\/span>\u00a0&#8211;\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~JimBooth\">Jim Booth<\/a><img decoding=\"async\" src=\"http:\/\/fox.wikis.com\/OffSiteLnk.gif\" alt=\"Offsite link to http:\/\/www.jamesbooth.com\n\" \/><\/p>\n<hr \/>\n<p><img decoding=\"async\" class=\"timeflag\" title=\"New 2005.12.29\" src=\"http:\/\/fox.wikis.com\/cal_sm.png\" alt=\"\" \/>\u00a0<b>Fields and Rounding<\/b><\/p>\n<ul>\n<li>The Double field type does\u00a0<i>not<\/i>\u00a0round any number stored into it.<\/li>\n<li>The Integer field type takes the integer portion (just like int()) of any value stored in it.<\/li>\n<li>Values stored in Currency, Numeric, and Float fields are rounded to the decimal precision specified when the field was defined.<\/li>\n<\/ul>\n<p>&#8211;\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~BenCreighton\">Ben Creighton<\/a><\/p>\n<hr \/>\n<p><img decoding=\"async\" class=\"timeflag\" title=\"New 2005.12.29\" src=\"http:\/\/fox.wikis.com\/cal_sm.png\" alt=\"\" \/>\u00a0<b>Default Values<\/b><br \/>\nThe following table should help with understanding default values of fields if no default is otherwise specified.<\/p>\n<table class=\"bordertable\" width=\"100%\">\n<tbody>\n<tr>\n<th>Data type<\/th>\n<th>Default Value<\/th>\n<th>Empty()?<\/th>\n<th>IsBlank()?<\/th>\n<\/tr>\n<tr>\n<td>Double, Integer<\/td>\n<td>0 (zero)<\/td>\n<td>Yes<\/td>\n<td>No<\/td>\n<\/tr>\n<tr>\n<td>Numeric, Currency, Float<\/td>\n<td>0 zero)<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>Character<\/td>\n<td>all space characters (ASCII 32)<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>Memo, Varchar<\/td>\n<td>&#8220;&#8221; (the empty string)<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>Logical<\/td>\n<td>.f.<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>General<\/td>\n<td>None<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>Date, Datetime<\/td>\n<td>None, incorrect results (but no errors) if default value is used in date\/datetime calculations. Recommended to specify NULL as default<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#8211;\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~BenCreighton\">Ben Creighton<\/a><\/p>\n<hr \/>\n<p><img decoding=\"async\" src=\"http:\/\/fox.wikis.com\/work.gif\" \/>\u00a0Variables:<br \/>\nCharacter<br \/>\nNumeric<br \/>\nLogical<br \/>\nDate<br \/>\nDatetime<br \/>\nObject<\/p>\n<p>Expressions (remember, Variables are just a simple expression, so this appies to variables too.) These have their own set of data types, which are a bit different than the set of field data types.<\/p>\n<p>It is especially evident with numerics: fields can be D, F, I, N and Y; expressions are all just N.<br \/>\n<img decoding=\"async\" src=\"http:\/\/fox.wikis.com\/work.gif\" \/><\/p>\n<hr \/>\n<p><img decoding=\"async\" src=\"http:\/\/fox.wikis.com\/graphics\/pmanthis_small.jpg\" \/><span style=\"color: green;\">&#8220;Returning the TYPE() or VARTYPE() of integer, numeric, double and float fields all as &#8220;N&#8221; is a bug. While all are treated the same way when used as memory variables, the storage and precision of integers and doubles are significantly different than the other two. A work-around is to use AFIELDS() to determine which field type you&#8217;re working with, and reserve the use of TYPE() for memory variables.&#8221; &#8212;\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~HackersGuide\">Hackers Guide<\/a><\/span><\/p>\n<hr \/>\n<p>I came across this on the MSDN Library Oct 99 in C:\\Program\u00a0<a class=\"createtopiclink\" title=\"Create a topic for this\" href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Edit~Files\\Microsoft\">Files\\Microsoft<\/a>\u00a0Visual\u00a0<a class=\"createtopiclink\" title=\"Create a topic for this\" href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Edit~Studio\\MSDN\\99OCT\\1033\\foxhelp\">Studio\\MSDN\\99OCT\\1033\\foxhelp<\/a>.chm :: \/html\/condata_and_field_types.htm<\/p>\n<p>What is it talking about a Variant data type in VFP for? I understood all memory variables to be &#8220;variant&#8221; in that they could contain any data type, but never saw the word &#8220;Variant&#8221; used in VFP before. Does it have a significance? It seems to have been a lapse of a documentation author who came from VB and was mistaken that &#8220;variant&#8221; had a meaning of its own. &#8211;\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~wgcs\">wgcs<\/a><\/p>\n<hr \/>\n<p>VFP controls can be bound to not only char things, but numerics, dates&#8230; (see\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~VFPDataTypes~VFP\">http:\/\/fox.wikis.com\/wc.dll?Wiki~VFPDataTypes~VFP<\/a>\u00a0for all of them). The .text prop is the char version of .value, regardless of what type .value is. One of the &#8216;features&#8217; of VFP is loosely typed variables &#8211; they assume the type of what ever is being stored to them.<\/p>\n<p>lxVar = &#8220;hello world!&#8221;<br \/>\n? lxVar<br \/>\nlxVar = 1.5<br \/>\n? lxVar<\/p>\n<p>This includes the .value of an object:<\/p>\n<hr \/>\n<p><img decoding=\"async\" class=\"timeflag\" title=\"New 2001.02.23\" src=\"http:\/\/fox.wikis.com\/cal_sm.png\" alt=\"\" \/>\u00a0[2001.02.23]<br \/>\n<b>General and Memo Fields<\/b><\/p>\n<p>For those who know how hard is to manage general fields, especially writing them to the SQL Server image field or into the ADO object binary data field, following are some tips. Before tips itself I posted here also some problems description so you will understand better how they can help and where to use them.<\/p>\n<p>Memo and General fields in VFP table stores by the same way &#8211; 4-byte pointer in the DFB table that follows to the chunk in the fpt file. Both memo field and general field allows any binary data stored there, include chr(0) and many other characters that are not allowed by otehr database systems that manage memo fields (SQL Server text field type tends to corrupt binary data stored in it).<\/p>\n<p>The problem is that VFP allows to work free with memo fields providing a wide set of the string functions (see\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~StringHandling\">String Handling<\/a>), but don&#8217;t allows to store memo field content in the image field of the SQL Server using SPT because it mapped to general field in VFP. You can do this however, using mapping field type in the remote view. What about ADO? Another problem is that there are no any command in VFP that allows to store content of general field into the file or get it as a binary string. For example assume we have SQL Server database that stores some binary data in the image field (images). When we run a query from VFP for such field, it will return as a general field. Now, how to save a content of general field to file (image) and show image on form? Again, use of remote views only&#8230;<\/p>\n<p>All problems above could be solved very easy. Using the fact that memo and general fields are stored in the VFP table files by the same way, we can easy change a field type&#8230; by low-level functions, causing getting content of general field as we use memo field (assumed that genera\/memo field is a first field in the table):<\/p>\n<ul>\n<li>Save image to memo field<\/li>\n<li><a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~FiltoStr\">Filto Str<\/a>(&#8230;) than replace<\/li>\n<li>or append memo &#8230; from &#8230;<\/li>\n<\/ul>\n<ul>\n<li>change memo field type to general<\/li>\n<\/ul>\n<p>ll = fopen(&#8220;F:\\ttt.dbf&#8221;,12)<br \/>\nfseek(ll,43)<br \/>\nfwrite(ll,&#8217;G&#8217;)<br \/>\nfclose(ll)<\/p>\n<ul>\n<li>now you can save it to image field type<\/li>\n<\/ul>\n<ul>\n<li>above could be used also to get general field from SQL Server using ADO<\/li>\n<\/ul>\n<p>And opposite operation:<\/p>\n<ul>\n<li>get data from serevr in general field<\/li>\n<\/ul>\n<p>&#8230;<\/p>\n<ul>\n<li>change general field type to memo<\/li>\n<\/ul>\n<p>ll = fopen(&#8220;F:\\ttt.dbf&#8221;,12)<br \/>\nfseek(ll,43)<br \/>\nfwrite(ll,&#8217;M&#8217;)<br \/>\nfclose(ll)<\/p>\n<ul>\n<li>now you can read it as a text!<\/li>\n<li>use this way also to store general field on the server using ADO<\/li>\n<\/ul>\n<p>There is also assumption that working with general fields should be avoided at all cost. Its very\u00a0<b>wrong<\/b>\u00a0assumption. General field in VFP provides such functionality that is unique &#8211; it does not exists in any other database systems. Well, you can assume it is dead, but look to following example.<br \/>\nSay, you require to print a MS Graph chart. Well, its easy to put a chart to the form control and populate it and design it using its objects model and properties. Now, what if you need to include it into VFP report? Well, the solution here is only to use General field. However, little of programmers use that. Why? The simple reason is that you cannot use control&#8217;s object model to edit chart in the general field. Well, you cannot do this directly. However, you can make an invisible form, put\u00a0<a class=\"createtopiclink\" title=\"Create a topic for this\" href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Edit~OLEBoundControl\">OLEBoundControl<\/a>\u00a0on it, bind it to your general field with chart and using &#8220;<a class=\"createtopiclink\" title=\"Create a topic for this\" href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Edit~MyForm\">MyForm<\/a>.OleBoundControl1.Object&#8230;&#8221; syntax you can edit enything you want in that chart! The greatest thing is that changes by such way are really stored in the general field and could be used in report. So now we can make an empty chart in the general field, change it as we want by useing\u00a0<a class=\"createtopiclink\" title=\"Create a topic for this\" href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~Edit~OLEBoundControl\">OLEBoundControl<\/a>\u00a0on the form that is outside of visible portion of VFP main window, than show it in report&#8230; Pretty\u00a0<b>COOL<\/b>! Now, using this approach, you can prepare for printing any OLE Object by this way and print it! For eample, this way RTF content could be easy printed in the VFP report using Word OLE object in general field. Just replicate it for all records and change each general field to store RTF content for each record.<\/p>\n<p>The same applies to all other OLE controls. You can use Object property of the OLE Bound control to edit properties of any object in it across all objects tree of OLE object. You can do this for MS Word documents, for example. And all changes are stored in the general field where you can use it again and again.<\/p>\n<hr \/>\n<p>See also\u00a0<a href=\"http:\/\/fox.wikis.com\/wc.dll?Wiki~VFPVersionDataTypeConcordance\">VFP Version Data Type Concordance<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>VFP has two realms that concern datatypes: the DBF table, and the types of variables and .value property. There are 3 differences: objects, numerics, and chars. There is no Object type of DBF field, and DBF has different kinds of numerics: integer, float, currency, etc. as where numeric variables are all stored in floating point. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[],"class_list":["post-25230","post","type-post","status-publish","format-standard","hentry","category-13"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6cOVM-6yW","_links":{"self":[{"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=\/wp\/v2\/posts\/25230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25230"}],"version-history":[{"count":1,"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=\/wp\/v2\/posts\/25230\/revisions"}],"predecessor-version":[{"id":25231,"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=\/wp\/v2\/posts\/25230\/revisions\/25231"}],"wp:attachment":[{"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tom.tomwork.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}